Как приостановить и возобновить процессы, такие как bash

этот вопрос является продолжением: как приостановить и возобновить процессы

Я начал firefox из сеанса bash в gnome-terminal.

  • Это процесс, который очищает себя от завершения или ядра?
  • Почему процессы не заполняют пустые идентификаторы процессов
  • Отправка sigaction / sigqueue через оболочку
  • В чем разница между управляющими символами ^ S и ^ Z внутри терминала?
  • Почему этот трубопровод получает SIGTTIN?
  • Какой сигнал отправляется, когда вы закрываете терминал bash для запущенных программ
  • Дерево процессов выглядит так:

    $ ps -e -o pid,ppid,cmd -H 1828 1 gnome-terminal 26677 1828 bash 27980 26677 /bin/sh /usr/lib/firefox-3.6.15/firefox 27985 27980 /bin/sh /usr/lib/firefox-3.6.15/run-mozilla.sh /usr/lib/firefox-3.6.15/firefox-bin 27989 27985 /usr/lib/firefox-3.6.15/firefox-bin 28012 27989 /usr/lib/firefox-3.6.15/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so 27989 plugin true 

    Когда я нажимаю CTRL+Z в bash, он приостанавливает firefox. Когда я выдаю команду bg (или fg ), она возобновит firefox. Это так, как ожидалось.

    Когда я kill -s SIGTSTP 27980 команду kill -s SIGTSTP 27980 в другой терминал, она будет печатать строку [1]+ Stopped firefox в первом терминале (точно так же, как когда я нажимаю CTRL+Z ), но она не приостанавливает firefox. Я предполагаю, что он только приостанавливает скрипт оболочки.

    Когда я kill -s SIGTSTP 27989 команду kill -s SIGTSTP 27989 (обратите внимание на PID) в другом терминале, она приостанавливает firefox. Первый терминал не принимает к сведению это.

    Как bash приостанавливает все дерево процессов? он просто пересекает дерево и SIGTSTP всех детей?

  • Периодически перезапускать службу systemd
  • Является ли nohup неопределенным?
  • Как обеспечить исключительную доступность процессора для текущего процесса?
  • Пожалуйста, объясните этот вывод команды ps -ef?
  • Система управления документами для Linux
  • Arch Linux pacman, определяющий версию пакета
  • One Solution collect form web for “Как приостановить и возобновить процессы, такие как bash”

    Работы Shell работают в «группах процессов»; посмотрите на столбец PGRP в расширенном выпуске ps . Они используются как для управления заданиями, так и для определения того, кто «владеет» терминалом (real или pty).

    POSIX (взятый из System V) использует отрицательный идентификатор процесса, чтобы указать группу процессов, так как группа процессов идентифицируется первым процессом в группе («лидер группы процессов»). Поэтому вы должны использовать ps для определения группы процессов, а затем kill -s TSTP "-$pgrp" . (Попробуйте ps -u"$USER" -opid,ppid,pgrp,cmd .)

    В дереве процессов группа процессов начинается с сценария firefox запущенного bash , поэтому группа процессов будет 27980, и команда будет kill -s TSTP -27980 .

    Естественно, чтобы возобновить процессную группу, выпустите kill -s CONT -- -27980 .

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