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

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

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

Дерево процессов выглядит так:

$ 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 всех детей?

  • Arch Linux pacman, определяющий версию пакета
  • система управления персональным документом
  • Объяснение файла - org.freedesktop.login1.policy
  • Является ли «управление терминалом» исключительно для пользовательского контроля?
  • Arch Linux netinstall - конфликтующие пакеты при установке
  • Как изменить свойства панели рабочего стола из командной строки?
  • Как я могу отправить сигналы включения / выключения питания на монитор VGA?
  • Список программного обеспечения, предустановленного в Linux Mint?
  • 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 - лучшая ОС в мире.