Как выйти из процесса после отказа

Я использую disown для запуска длительного процесса через SSH. Например я запускаю следующую программу:

 vmd -e script.tcl > out.txt & 

Затем я использую disown -a чтобы отсоединить его от оболочки. Когда я out.txt подключаю терминал, out.txt показывает, что программа завершилась. Тем не менее, он показывает командную строку vmd ( vmd> ). VMD – это программа для запуска сценариев TCL для химического моделирования. Вы можете предположить, что это что-то вроде Python с собственной оболочкой

http://www.ks.uiuc.edu/Training/Tutorials/vmd/tutorial-html/node8.html

Через некоторое время я не смог подключиться к ssh из-за ограничения на количество запущенных процессов ( fork retry: Resource temporary unavailable ). Во-первых, я хочу знать, как я могу убить те отрешенные процессы, если они находятся в состоянии ожидания.

Во-вторых, я хочу знать, если я vmd программы vmd , поместив команду exit в конец script.tcl , решит ли она проблему выше для будущего использования?

Существует больше, чем один способ сделать это. (ТМ)

Решение 1 (возможно, лучшее): добавьте команду для выхода из vmd в конец вашего скрипта.

Решение 2: перенаправить стандартный ввод команды vmd (или, в зависимости от вашего мышления) на нулевое устройство, например:

 vmd -e script.tcl > out.txt < /dev/null & 

Таким образом, когда vmd со своим скриптом и попытается прочитать следующую команду из стандартного ввода, он получит «конец файла» и завершится.

Решение 3: Убейте оставленный vmd процесс с помощью kill . Вам понадобится его PID для того, что вы можете заметить, когда shell печатает его после запуска с & , или найти с помощью команды ps ax . kill -TERM попробуйте kill -TERM (по умолчанию), если это не работает, используйте kill -HUP . Не используйте kill -KILL aka kill -9 .

Решение 4: используйте screen или tmux вместо disown . Таким образом, вы можете переподключиться к запущенному процессу vmd и вводить дополнительные команды, такие как exit .