Приостановка и возобновление работы приложения

colrm(часть util-linux, уже должна быть установлена ​​в большинстве дистрибутивов )кажется, гораздо лучше справляется с интернационализацией:

$ echo 'αβγ' | colrm 3
αβ
$ echo 'αβγ' | colrm 2
α

Остерегайтесь нумерации :colrm Nудалит столбцы из N, печатая символы до N-1.

(кредиты)

2
10.07.2020, 10:41
3 ответа

Обычный ответ на такого рода вещи заключается в том, что вы должны послать сигнал процессу группе , а не только процессу. Все процессы, порожденные firefox, должны находиться в одной группе процессов. Действительно, в моей системе:

$ ps -aeo pgid,ppid,pid,s,comm,args | grep -E '[f]irefox|[P]PID'
   PGID    PPID     PID S COMMAND         COMMAND
   1095       1  151407 S firefox         /usr/lib/firefox/firefox
   1095  151407  151541 S Web Content     /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151607 S WebExtensions   /usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151689 S Web Content     /usr/lib/firefox/firefox -contentproc -childID 3 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151711 S Web Content     /usr/lib/firefox/firefox -contentproc -childID 4 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151738 S Web Content     /usr/lib/firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151765 S Web Content     /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151802 S Web Content     /usr/lib/firefox/firefox -contentproc -childID 7 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151876 S Web Content     /usr/lib/firefox/firefox -contentproc -childID 8 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151889 S Web Content     /usr/lib/firefox/firefox -contentproc -childID 9 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151928 S Privileged Cont /usr/lib/firefox/firefox -contentproc -childID 10 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab

Обычно я мог просто запустить kill -19 -1095, и это приостановило бы работу всех членов группы процессов 1095. К сожалению, по крайней мере, в моей системе эта группа содержит не только Firefox :

.
$ ps -aeo pgid,ppid,pid,s,comm,args | awk '$1==1095' | wc
    104    1382   29087

В этой группе 104 процесса, включая такие базовые инструменты, как Xorg или мой вход в менеджер дисплея. Так что, хотя технически это будет работать, поскольку он приостановит работу Firefox, он также приостановит весь мой графический интерфейс, из-за чего система перестанет отвечать.

Вместо этого вы можете использовать флаг -fдляpkill:

-f, --full

The pattern is normally only matched against the process name. When -f is set, the full command line is used.

Если я сейчас запущу pkill -f -19 firefox, все процессы, чья командная строка соответствует firefox, будут приостановлены (посмотрите на столбец S):

$ pkill -f -19 firefox
$ ps -aeo ppid,pid,s,comm,args | grep -E '[f]irefox|[P]PID'
   PGID    PPID     PID S COMMAND         COMMAND
   1095       1  151407 T firefox         /usr/lib/firefox/firefox
   1095  151407  151541 T Web Content     /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151607 T WebExtensions   /usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151689 T Web Content     /usr/lib/firefox/firefox -contentproc -childID 3 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151711 T Web Content     /usr/lib/firefox/firefox -contentproc -childID 4 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151738 T Web Content     /usr/lib/firefox/firefox -contentproc -childID 5 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151765 T Web Content     /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151802 T Web Content     /usr/lib/firefox/firefox -contentproc -childID 7 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151876 T Web Content     /usr/lib/firefox/firefox -contentproc -childID 8 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151889 T Web Content     /usr/lib/firefox/firefox -contentproc -childID 9 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab
   1095  151407  151928 T Privileged Cont /usr/lib/firefox/firefox -contentproc -childID 10 -isForBrowser -prefsLen 136 -prefMapSize 225550 -parentBuildID 20200603085854 -appdir /usr/lib/firefox/browser 151407 true tab

Конечно, это означает, что если у вас есть, например, текстовый файл с именем firefoxManual, открытый в текстовом редакторе, или любой другой процесс, соответствующий firefox, он также будет приостановлен.

В качестве альтернативы, если вы хотите быть на 100% уверены, что получаете только правильные процессы, вы можете получить PID Firefox, а затем отправить сигнал ему и всем процессам, у которых он является родительским идентификатором:

pkill -19 firefox; pgrep -P $(pgrep firefox) | xargs kill -19

Вы могли бы даже превратить это в функцию:

myKill(){
    pkill "$1" "$2"; pgrep -P $(pgrep "$2") | xargs kill "$1"
}

И теперь вы можете остановить их всех с помощью:

myKill -19 firefox

И перезапустите с помощью:

myKill -18 firefox
1
18.03.2021, 23:20

Конечно, ваш Linux уже обновлен до cgroups v2 и вашID=1000:

systemd-run --user --slice=firefox.slice firefox
# To freeze
echo 1 > /sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/firefox.slice/cgroup.freeze
# To unfreeze
echo 0 > /sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/firefox.slice/cgroup.freeze
0
18.03.2021, 23:20

pkill— отличный инструмент, который, по словам человека, «ищет или сигнализирует о процессах на основе имени». Более того, он соответствует нескольким процессам. Пока весь веб-контент и веб-расширения работают с одним и тем же именем файла, мы можем использовать pkill -19 firefox-esrдля приостановки как можно большего количества ВСЕХ дочерних процессов .

В какой-то момент это может быть небезопасно, и если мы хотим сопоставить конкретную установку Firefox (, но все экземпляры ), мы можем запросить PID с помощью fuser(, чтобы показать, какие процессы используют указанный компьютерный файл):fuser /usr/lib/firefox-esr/firefox-esr | grep -Es "[0-9]+" | xargs kill -19(-18 для возобновления ).

Последний результат можно проверить с помощью конкатенации | xargs ps, которая выводит статус процессов как 'Sl' (прерываемый спящий режим, многопоточный -многопоточный ).

1
18.03.2021, 23:20

Теги

Похожие вопросы