Как убить процесс, который порождает несколько программ Java, каждая из которых принимает порт

У меня есть программа .sh, которая порождает несколько дочерних процессов, например так:

javac *.java
rmiregistry 3300 & 
sleep 5
java Node 3300 3001 1 &
sleep 1
java Node 3300 3002 1 &
sleep 1
java Node 3300 3003 1 &
sleep 1
java Node 3300 3004 1 &
sleep 1
java Node 3300 3005 1 &

Теперь, когда я запускаю это на экране терминала, я хотел бы иметь возможность сделать что-то вроде ctr-c, чтобы остановить это. Однако, когда я делаю это, он не освобождает порты, занятые узлами. Есть ли способ убедиться, что когда я ctr-c, порты не связаны, или есть ярлык, который также освобождает порты, используемые дочерними процессами? Или мне нужно использовать отдельную команду kill? Также обратите внимание, что узлы могут запускать несколько потоков сами (из Java).

2
задан 26 April 2016 в 14:48

2 ответа

Способ уничтожить все задания, запущенные процессом, состоит в том, чтобы использовать идентификатор группы процесса (pgid). Самый простой способ видеть, что это для запуска сценария в фоновом режиме:

$ launch_java.sh &
[1] 25649

Числом, распечатанным выше, является PID launch_java.sh который является также идентификатором группы, так как это запускает остальных. С другой стороны, можно найти его через ps:

$ ps -a -o pgid,command | grep java
25649 java Node 3300 3002 1 

1-е поле является pgid. После того как у Вас есть это, можно использовать kill уничтожить его и все его дети:

kill -TERM -25649

Как объяснено в man kill:

          -n     where n is larger than 1.  All processes in process group
                 n are signaled.  When an argument of  the  form  '-n'  is
                 given,  and it is meant to denote a process group, either
                 a signal must be specified first, or the argument must be
                 preceded  by a '--' option, otherwise it will be taken as
                 the signal to send.
0
ответ дан 27 April 2016 в 00:48

используйте ps -aef или ps -aux команда, чтобы найти PID родителя детей и уничтожить его kill -9 PID.

-1
ответ дан 27 April 2016 в 00:48

Другие вопросы по тегам:

Похожие вопросы: