А вообще ядро посылает сигналы?
Ему это зачем, если оно, собственно, сигналы, как я понимаю, доставляет?
Т.е. вызывает функции, "подписанные" на тот или иной сигнал и изменяет состояние процесса в своих внутренних структурах.
kill - системный вызов. В 2.4 можно было просто юзать sys_kill из ядра и не парится, в 2.6 все сложнее из-за того, что не экспортируется sys_call_table. Есть 2 способа - или залезть в кернел и заставить экспортировать таблицу системных вызовов, или просто указать адрес системного вызова взяв его в System.map. Первый способ - дыра в безопасности, второй не переносим..
Другого способа не знаю (