アプリケーションの一時停止と再開

アプリケーションの一時停止と再開

SIGSTOPとシグナルを送信してプロセスを一時停止して再開できますSIGCONT

Firefoxを例に挙げましょう。

pkill --signal SIGSTOP firefox
pkill --signal SIGCONT firefox

実際、Firefoxには、、Web Contentなどのいくつかの補助プロセスもあり、実行され続けWebExtensionsますRDD Process

アプリケーションに属するプロセスグループ全体を一時停止して一時停止を解除する方法はありますか?

ベストアンサー1

この種のことに対する一般的な答えは、プロセスに信号を送る必要があるということです。グループそしてコースだけではありません。生成されたすべてのプロセスは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

このグループには、XorgやMy Display Managerログインなどの基本的なツールを含む104のプロセスがあります。したがって、これはFirefoxを一時停止するため技術的に機能しますが、GUI全体も一時停止し、システムが応答しなくなります。

したがって、次の-fフラグを使用できますpkill

-f、--完了

このパターンは通常、プロセス名とのみ一致します。 -fを設定すると、コマンドライン全体が使用されます。

今すぐ実行すると、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テキストエディタまたは他の一致するプロセスでopenという名前のテキストファイルがある場合、そのファイルも中断firefoxされることを意味します。

あるいは、正しいプロセスのみを取得することを100%確実にするには、FirefoxのPIDを取得してから、Firefoxとそれを親IDとして使用するすべてのプロセスにシグナルを送信できます。

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

おすすめ記事