Как приостановить и возобновить процессы, такие как 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 всех детей?

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 .

  • Arch Linux pacman, определяющий версию пакета
  • Как я могу отправить сигналы включения / выключения питания на монитор VGA?
  • Нет информации о версии?
  • Аккумулятор долго не работает на Linux для Samsung серии 9
  • Объяснение файла - org.freedesktop.login1.policy
  • Управление выходными потоками многих подпроцессов с взаимоблокировками
  • Как изменить свойства панели рабочего стола из командной строки?
  • Пожалуйста, объясните этот вывод команды ps -ef?
  • Нужна ли мне приятная работа на виртуальной машине?
  • VirtualBox жалуется, что модуль ядра не загружен
  • Как я могу добавить пакет к установке Ubuntu по умолчанию?
  • Interesting Posts

    Сделать SSH не использовать VPN

    Как узнать, подключен ли процесс к интерфейсу крана?

    Как запустить команду только в том случае, если sed заменяет строки

    Использование sed для удаления строки или абзаца между разделителем

    Как сделать редактирование sudo в MC?

    Как управлять mysql с помощью zpty?

    wifi – достигнуто максимальное количество ожидающих ответов на соединение

    Нет разрешения на создание подкаталога, когда пользователь принадлежит группе каталогов

    Файловая система по-прежнему показывает старое значение после сокращения в Linux, однако показывает правильное значение в LVM

    печатать несколько слов, разделенных пробелом

    Как напечатать дефисы, если переменная пуста?

    Виртуальный порт rawsidi Alsa получит только первый и последний MIDI-байты любого сообщения

    Не удалось загрузить модуль ядра 'nvidia.ko'

    Как я могу создать полный список файлов, установленных пакетом?

    Не удалось обновить / установить завиток («следующие пакеты имеют неудовлетворенные зависимости»)

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