Установить идентификатор родительского процесса из 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, чтобы убить их по имени.

  • Случайные настройки / lib разрешений до 644
  • Плимут возвращается к анимации загрузки текста
  • Ubuntu 14.04 встроенная веб-камера не обнаружена
  • Как решить nsf-общую связанную ошибку при установке zsh в ubuntu?
  • Конфигурация xrandr не загружается должным образом при запуске из .xprofile
  • Как получить доступ ко всем 8 последовательным портам на моей 8-портовой последовательной PCI-карте
  • Установка системы Ubuntu 12.04 c ++
  • После форматирования диска невозможно использовать диск
  • список всех компонентов компьютера ARM в Linux?
  • QoS с TC qdiscs: возможно ли, чтобы ВСЕ исходящие соединения имели ограничение скорости x на уникальный IP?
  • Где я могу найти исходный код Gnome-Shell 3.10 Status Indicator / Bar?
  • Interesting Posts

    Мне нужно найти Mac-адрес от клиента, подключенного к моему Teampeak

    Является ли раскрытие переменной DBUS_SESSION_BUS_ADDRESS уязвимостью?

    Пользователи, прошедшие аутентификацию через AD, больше не запрашивают пароль

    Установка вентилятора процессора на 100%

    Как узнать логическое имя интерфейса tap0?

    Подача / dev / random с чтением диска и т. Д.

    Linux: команда set для локальных переменных

    Можно ли перезаписать файл, созданный mktemp?

    Как убить вперед до конца большого слова или следующего символа пробела

    повторно подключиться к отключенному сеансу шпаклеры или подключиться к сеансу бездействия в Linux

    LD для детерминированной загрузки программных и общих объектов?

    Как пересканировать устройства шины scsi?

    Конфигурация Grub для отдельных корневых и загрузочных разделов

    vmlinuz и initrd не найдены после сборки ядра?

    Как настроить сервер localhost с протоколом http на apache

    Linux и Unix - лучшая ОС в мире.