Я не понимаю, как вы пытаетесь убить процесс изнутри себя (ваш $$
в теме вопроса), когда он спит.
Если вы убиваете из РАЗНОГО процесса, тогда он будетиметь свой собственный $$.Вам нужно выяснить PID исходного процесса, который нужно убить первым (путем просмотра списка процессов или каким-либо образом связав его с исходным процессом).
Уничтожение спящего процесса работает очень хорошо
$ ( date ; perl5.8 -e 'sleep(100);' ; date ) &
Wed Sep 14 09:48:29 EDT 2011
$ kill -KILL 8897
Wed Sep 14 09:48:54 EDT 2011
Это также работает с другими «убивающими» сигналами («INT», «ABRT», «QUIT», «TERM»)
ОБНОВЛЕНИЕ: При повторном чтении может возникнуть проблема, которую вы имели в видубыло то, что "вызванная внешним процессом" часть не происходит.Если это так, вам необходимо:
Установить обработчик сигнала CATCHABLE в вашем процессе перед сном ($SIG{'INT'}
) - обработчик не может перехватить SIGKILL.
Отправить SIGINT из указанного «внешнего процесса»
Выполнить всю необходимую очистку после прерывания sleep () с помощью SIGINT из обработчика SIGINT.