Установить идентификатор родительского процесса из ShellScript, позже удалить все дочерние процессы

Я хочу написать сценарий оболочки для моей машины Ubuntu, которая запускает несколько серверных приложений. Мне нужен этот скрипт, чтобы выполнить его из моего java-приложения. Но мне нужен простой способ группировать все эти серверные процессы, чтобы позднее можно было убить все серверные процессы из моего приложения Java.

Моя идея – установить родительский идентификатор процесса из моего сценария оболочки и убить их в более поздний момент с pkill команды pkill .

Как я могу сделать все это из сценария оболочки?

3 Solutions collect form web for “Установить идентификатор родительского процесса из ShellScript, позже удалить все дочерние процессы”

Вы можете запускать экземпляры сервера Appium, отмечая их PID, который вы можете использовать позже, чтобы убить. например

 Appium_server_1 & instance1=$! Appium_server_2 & instance2=$! Appium_server_3 & instance3=$! . . . 

а затем вы можете убить все экземпляры переменной командой kill .

Если ваша оболочка поддерживает встроенную переменную PPID , вы можете использовать эту переменную, если вы действительно заинтересованы в PID процесса, который называется оболочкой.

Если вы заинтересованы в PID этой оболочки и хотите дать ее другим, используйте $$ .

Если я правильно понял ваш вопрос, ответ – вы не можете этого сделать. Программа java запускается, вызывает сценарий оболочки, который запускает больше процессов. Затем завершается сценарий оболочки, и вы хотите, чтобы элемент управления передавался в java-процесс, который должен был бы отключать все остальные процессы.

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

Есть ли причина, почему вы используете сценарий оболочки для запуска дополнительных процессов?

Почему бы просто не использовать java для запуска всех процессов (используя библиотеки процессов) или использовать что-то вроде supervisord ( http://supervisord.org/ ). Таким образом, вы можете контролировать суперзавод для запуска / остановки процессов из программы java.

Если все процессы называются одинаковыми, вы также можете использовать команду killall, чтобы убить их по имени.

  • bash autocomplete не работает, не «завершает»
  • Что делает adduser для этого useradd?
  • Перенос прав доступа от root к постоянному пользователю
  • сервис запущен при загрузке, ведь все остальное?
  • Почему этот флаг не работает?
  • «Невозможно разрешить имя хоста» - как очистить имя хоста без перезагрузки
  • Grub 2 - попытка загрузки в «загрузчик Windows» загружает меня обратно в grub
  • UTF-8 не работает над SSH
  • Добавление репозиториев с помощью «./»
  • Как определить, какое событие отключает липкие клавиши?
  • xkill Используется на рабочем столе
  • Linux и Unix - лучшая ОС в мире.