Как убить интерактивную оболочку и запустить процесс / работу на ней? - PullRequest
0 голосов
/ 04 декабря 2018

Я использую интерактивную оболочку Docker для выполнения команды в оболочке.

e.g. docker exec -i docker_container_name sh

и я запускаю команды в этой интерактивной оболочке.Теперь, если я хочу уничтожить эту интерактивную оболочку и запустить на ней команду, как это сделать?

Я попытался отправить сигнал kill -9 shell_pid or kill -s 15 shell_pid в интерактивную оболочку.Однако в этом случае интерактивная оболочка уничтожается, но команда, выполняющаяся на интерактивной оболочке, остается там и становится бесхозным процессом.

Пожалуйста, дайте мне знать, как убить интерактивную оболочку командой, запущенной на ней.

1 Ответ

0 голосов
/ 04 декабря 2018

Вы должны получить дочерние (ren) процессы в первую очередь, прежде чем убивать оболочку, и убить их тоже

CPIDS=`pgrep -P $shellpid` # gets pids of child processes
kill -9 $shellpid
for cpid in $CPIDS ; do kill -9 $cpid ; done

Или альтернативно (это не так безопасно, потому что, если запускать серию команд в оболочкеследующая может быть вызвана между этими двумя командами уничтожения)

pkill -TERM -P $shellpid # sends TERMINATE signal to children
kill -9 $shellpid
...