LINUX.ORG.RU

будут ли проблемы при использовании 'kill -9 PID' в моем случае?


0

1

я запускаю некоторый процесс так: "( proc; echo $? > file.ec )"

как написано тут(http://habrahabr.ru/post/95102/) 'kill -9 PID' не завершает дочерние процессы. т.е. в моем случае, пара круглых скобок создает дочерний процесс в котором выполняется дочерний 'proc'.

вопроса два: 1)в моем случае таки может получится так, что 'proc'и будут оставаться висящими? 2)каким же образом надежно убить дерево процессов? в той же статье рекомендуют использовать 'kill -15 PID'. но не понимаю, в чем разница. где об этом можно почитать?

благодарен.

★★★

15 - это TERM, 9 - KILL

leave ★★★★★
()

в той же статье рекомендуют использовать 'kill -15 PID'. но не понимаю, в чем разница. где об этом можно почитать?

man 7 signal

и не благодари

anonymous
()

Собственно никто не мешает использовать групповую операцию, т.к. все что мы имеем в скобках можно грохнуть как единое целое (unit). Если мы используем kill -9 PID, то действительно имеем:

$ more tree.sh
(echo 1; sleep 30000) &
(echo 2; sleep 30000) &
(echo 3; sleep 30000) &
sleep 30000

$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S   500  3950  2232  0  80   0 -  1349 wait   pts/4    00:00:00 bash
0 R   500 10628  3950  0  80   0 -  1177 -      pts/4    00:00:00 ps
$ ./tree.sh
1
3
2

Пытаемся грохнуть на другом терминале:

$ ps -el | fgrep pts/4
0 S   500  3950  2232  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10629  3950  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10630 10629  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10631 10629  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10632 10629  0  80   0 -  1349 wait   pts/4    00:00:00 bash
0 S   500 10633 10630  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
0 S   500 10634 10629  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
0 S   500 10635 10632  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
0 S   500 10636 10631  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
$ kill -9 10629
$ ps -el | fgrep pts/4
0 S   500  3950  2232  0  80   0 -  1349 n_tty_ pts/4    00:00:00 bash
1 S   500 10630     1  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10631     1  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10632     1  0  80   0 -  1349 wait   pts/4    00:00:00 bash
0 S   500 10633 10630  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
0 S   500 10634     1  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
0 S   500 10635 10632  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
0 S   500 10636 10631  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
$ kill 10633 10634 10635 10636
$ ps -el | fgrep pts/4
0 S   500  3950  2232  0  80   0 -  1349 n_tty_ pts/4    00:00:00 bash

Пришлось, как видим, добивать. Однако возможен альтернативный групповой вариант:

$ (./tree.sh)
1
3
2

Пробуем грохнуть разом:

$ ps -el | fgrep pts/4
0 S   500  3950  2232  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10816  3950  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10817 10816  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10818 10816  0  80   0 -  1349 wait   pts/4    00:00:00 bash
1 S   500 10819 10816  0  80   0 -  1349 wait   pts/4    00:00:00 bash
0 S   500 10820 10817  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
0 S   500 10821 10816  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
0 S   500 10822 10819  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
0 S   500 10823 10818  0  80   0 -  1016 hrtime pts/4    00:00:00 sleep
$ kill -9 -10816
$ ps -el | fgrep pts/4
0 S   500  3950  2232  0  80   0 -  1349 n_tty_ pts/4    00:00:00 bash

kill -9 -PID посланный родоначальнику () убивает всех. kill -9 имеет то неприятное последствие, что не позволяет процессам выполнить что-либо для перевода состояния файлов в гарантированно корректное состояние. Другой вариант kill м.б. перехвачен и как-то разумно обработан.

io ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.