How are killer sudokus created?

What I'm trying now is:

- define some cages with undefined totals

- generate a grid such that no number occurs twice in such a cage

- compute the cage totals from the grid

- empty the grid

- see if the current cages and cage totals allow at most one solution

There are always more solutions. Now my program is running a scenario and still no answer after an hour.