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

  • Ubuntu: Как правильно настроить DNS-серверы в / etc / network / interfaces для resolvconf?
  • Незначительная проблема рендеринга шрифтов в Linux Mint 18.1 (Cinnamon)
  • «Ожидание конфигурации сети» при загрузке
  • Ошибка при создании виртуальной среды с помощью venv
  • «Невозможно подключиться к X-серверу» после входа в TTY
  • Может ли apt-get очистить с помощью apt?
  • nme для установки целевой Linux не работает на debian
  • Как избежать 4-х основных ограничений для Ubuntu в VMWare?
  • Сбой плагина Java на Ubuntu 16.04 / Firefox ESR 52.2.0
  • Как запустить службу автоматически, когда запускается Ubuntu?
  • Настройка беспроводной сети из командной строки
  • Interesting Posts

    Поиск абсолютного пути разделяемых библиотек, используемых исполняемым файлом

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

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

    Redis-подобная временная файловая система

    Какой из них более легкий и процессорный: LXC и UML

    Разделить журналы с заданиями cron

    AP случайно становится недоступным для клиентов во время работы hostapd

    Kipmi0 едет до 99,8% cpu на centos 6.4

    Как запустить источник с помощью docker exec?

    Как заставить программы python вести себя как соответствующие инструменты unix?

    Как подключиться к Mac OSX Maverick Shared Screen от Fedora 18?

    Как получить строку X из строки file1 и Y из файла2 с помощью команды оболочки?

    Каков предпочтительный способ обновления всего программного обеспечения в установке Fedora?

    Как получить тройную загрузку Linux Mint 17 Cinnamon / Ubuntu 14.04 / Windows 8?

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

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