LINUX.ORG.RU

man 1 kill если надо точно также как по Ctrl+C, то по этому сочетанию процессу посылаеться сигнал SIGINT, тоесть сигнал №3 Тогда соответственно или

kill -SIGINT $PID

или

kill -3 $PID

где $PID номер процесса

А еще более правильно

kill -SIGINT -$GID

то есть группе процессов, так как Ctrl+C посылает сигнал не одному процессу,а группе

anonymous
()
Ответ на: комментарий от anonymous

Немного не так поставил вопрос. Скрипт запускает процесс на выполнение. И соответственно пока он не остановиться, невозможно выполнить следующую команду. Как его остановить?

anonymous
()
Ответ на: комментарий от anonymous

Поправлюсь:
Немного не так поставил вопрос. Скрипт запускает процесс на выполнение. И соответственно пока этот процесс не остановиться, невозможно выполнить следующую команду в скрипте. Как его остановить?

anonymous
()
Ответ на: комментарий от anonymous

> Скрипт запускает процесс на выполнение. И соответственно пока этот процесс не остановиться, невозможно выполнить следующую команду в скрипте. Как его остановить?

А зачем запускать процесс, который вообще не нужен (ты ж его сразу грохать "как по ^C" собрался)?

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

Запускай процесс в фоне :)

типа

my_prog &

PID=$!

а потом если захочешь его убить

kill $PID

anonymous
()
Ответ на: комментарий от Die-Hard

>>А зачем запускать процесс, который вообще не нужен (ты ж его сразу грохать "как по ^C" собрался)?

Чего то меня последнее время напрягаю вопросы типа "А зачем"

Может ему этот процесс надо на пару секунд

Типа

my_prog &

PID=$1

sleep 2

kill -9 $PID

anonymous
()
Ответ на: комментарий от anonymous

> Чего то меня последнее время напрягаю вопросы типа "А зачем" Может ему этот процесс надо на пару секунд

А может, на 4?

А в твоем примере PID=$1 или PID=$! ?

А kill -9 или kill -2 (SIGINT)?

А твоя фамилия не Ностердамус?

:-)

Die-Hard ★★★★★
()

форкнуться на два процесса парент-чайлд, потом следить по таймаутам, например, чего и как. Или сделать 2 канала (парент-чайлд и чайлд-парент) между процессами для обмена информацией...

vilfred ☆☆
()
Ответ на: комментарий от anonymous

>>Этот процесс не работает в фоне... :(

Он читает что-то с терминала?

anonymous
()

2 автор:

Ты что, издеваешься, или решил в "Что?Где?Когда?" поиграть?

Сформулируй, наконец, свой вопрос.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Togda esli znaesh kak on budet nazyvat'sya mozhno sdelat' tak:

#/bin/tcsh

sleep 2; kill -9 `ps aux | grep my_process | awk {print $1}` &

my_process

No togda kill ub'et _VSE_ processy gde budet vstrechat'sya imya tvoego processa.

anonymous
()
Ответ на: комментарий от anonymous

>>No togda kill ub'et _VSE_ processy gde budet vstrechat'sya imya tvoego processa.

Ну тогда сразу killall -9 my_process, чего мелочиться!! ;)

Кстати, никто не пробывал посылать из под рута SIGKILL иниту?

Nesk
()
Ответ на: комментарий от Nesk

Nesk (*) (28.06.2004 19:49:44):

> Кстати, никто не пробывал посылать из под рута SIGKILL иниту?

Стандартный вопрос "на засыпку" :-)

Можешь смело посылать, ничего не будет: init не имеет обработчиков сигналов.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

> init не имеет обработчиков сигналов.

сорри, чувствую себя полным занудой, но не могу не поправить :)

у init'а есть обработчики сигналов, но -9 его действительно
не потревожит. потому, что в linux для процесса с pid == 1
SIG_DFL означает SIG_IGN.

см kernel/signal.c:get_signal_to_deliver()

вот эти строчки:
        /* Init gets no signals it doesn't want.  */
        if (current->pid == 1)
                continue;

idle ★★★★★
()
Ответ на: комментарий от idle

2idle (*) (28.06.2004 20:46:46):

Странно... Может, это -- новый Деним Торнадо Автешейв?

У меня в linux-2.4.19.SuSE/kernel/ никакого упоминания о get_signal_to_deliver не содержится.

С другой стороны, man 2 kill:

NOTES

It is impossible to send a signal to task number one, the init process, for which it has not installed a signal handler. This is done to assure the system is not brought down accidentally.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Спасибо всем, вроде немного разобрался....

anonymous
()
Ответ на: комментарий от Die-Hard

>  Странно... Может, это -- новый Деним Торнадо Автешейв?

а что это такое?

> У меня в linux-2.4.19.SuSE/kernel/ никакого упоминания
> о get_signal_to_deliver не содержится.

это в 2.6, в 2.4 это в arch/i386/kernel/signal.c:do_signal():

if (ka->sa.sa_handler == SIG_DFL) {
        /* Init gets no signals it doesn't want.  */
        if (current->pid == 1)
                continue;

> It is impossible to send a signal to task number one, the
> init process, for which it has not installed a signal handler.

послать можно, но доставлен он не будет.

~$ perl -e 'kill 9, 1 or die "$!\n"'
Operation not permitted
~$ su -
Password:
~# perl -e 'kill 9, 1 or die "$!\n"'
~#

собственно, что я придрался к тому, что:
> init не имеет обработчиков сигналов.

он, конечно, имеет. как минимум, SIGCHLD

idle ★★★★★
()
Ответ на: комментарий от idle

> послать можно, но доставлен он не будет.

точнее, он даже будет доставлен в том смысле,
что init будет прерван/разбужен, но SIG_DFL,
повторю, превращается в SIG_IGN.

idle ★★★★★
()
Ответ на: комментарий от idle

idle (*) (29.06.2004 12:43:48):

>собственно, что я придрался к тому, что:

>> init не имеет обработчиков сигналов.

Ну, я никогда в ядро на эту тему не лазил, просто верил цитированным строчкам из мануала:

> ...for which it has not installed a signal handler.

Чой-то я не могу найти исходников init'а.

Из ядерного кода я понял только, что в ините не выставляются обработчики по умолчанию:

if (ka->sa.sa_handler == SIG_DFL) {

/* Init gets no signals it doesn't want. */

if (current->pid == 1)

continue;

Наверное, это и имеется в виду: init имеет только те обработчики, которые САМ выставил.

>> Странно... Может, это -- новый Деним Торнадо Автешейв?

> а что это такое?

Бессмертные строчки из рекламы лосьона посте бритья!

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