助け合いフォーラム
正解
killall -SIGTERM mycommand
killall -s 15 mycommand
解説
指定したコマンドを実行している全てのプロセスに対してシグナルを送るには、killallコマンドを利用します。
killallコマンドの書式と主なシグナル名およびシグナル番号は以下のとおりです。
killall [-シグナル名または-シグナル番号] プロセス名(コマンド名)
または
killall -s [シグナル名またはシグナル番号] プロセス名(コマンド名)
上表より、適切なシグナルはTERM(SIGTERM)です。TERM(SIGTERM)シグナルは、プロセスが開いているファイルを閉じるなどの作業(クリーンアップ)を行ってからプロセスを終了します。
なお、killall、pkill(およびkill)コマンドでシグナルを指定しない場合は、デフォルトでこのシグナルが使用されます。
したがって正解は
・killall -SIGTERM mycommand
・killall -s 15 mycommand
です。
なお、以下のコマンドは全て同じ動作をします。
・pkill mycommand(「mycommand」を含む検索パターン)
・killall mycommand
・killall -15 mycommand
・killall -TERM mycommand
・killall -SIGTERM mycommand
・killall -s 15 mycommand
・killall -s TERM mycommand
・killall -s SIGTERM mycommand
その他の選択肢については次のとおりです。
・pkill mycommand
pkillコマンドではプロセス名(コマンド名)に検索パターンを指定するので、「mycommand」という文字列を含む全てのコマンドを実行しているプロセスが対象となります。よって不適切です。
・kill mycommand
・kill -15 mycommand
これらkillコマンドは、プロセスID(PID)を使用してプロセスにシグナルを送るコマンドですので、誤りです。
参考
また、pgrepコマンドで実行中のプロセスから特定の名前を持つプロセスIDを検索することができます。
pgrepコマンドの書式は以下のとおりです。
pgrep [ オプション ] 検索パターン
実行例:
検索パターンには拡張正規表現が指定できます。-lオプションを使うと、検索パターンにマッチしたプロセス名も表示されます。
特定のユーザーや権限が実行したプロセスのみを検索対象とすることもできます。
-Uオプションにユーザー名やユーザー識別子(UID)を指定すると、そのユーザーが実行したプロセスを検索できます。
-uオプションに実効ユーザー(実際の権限)名や実効ユーザー識別子(EUID)を指定すると、その権限で動作しているプロセスを検索できます。
以下はプログラムのパーミッションなどによって実ユーザーや実効ユーザーが変わる例です。
kill、killall、pkillコマンドで、プロセスに終了や再起動などのシグナル(命令)を送ることができます。kill、killall、pkillコマンドの書式と主なシグナル名およびシグナル番号は以下のとおりです。
kill [-シグナル名または-シグナル番号] プロセスID
または
kill -s [シグナル名またはシグナル番号] プロセスID
killall [-シグナル名または-シグナル番号] プロセス名(コマンド名)
または
killall -s [シグナル名またはシグナル番号] プロセス名(コマンド名)
pkill [-シグナル名または-シグナル番号] プロセス名(コマンド名)
または
pkill --signal [-シグナル名または-シグナル番号] プロセス名(コマンド名)
killコマンドはプロセスID(PID)を使用して単一のプロセスにシグナルを送りますが、killallコマンドはプロセス名(コマンド名)を使用して、同じプロセス名の全てのプロセスに対してシグナルを送ります。
例) kill -SIGHUP 1133
例) killall -SIGHUP mycommand
また、pkillコマンド、もしくはkillallの-rオプションを使うことで、プロセス名を拡張正規表現で指定してシグナルを送ることができます。
例)
また、killコマンドはジョブ番号を指定し、ジョブにシグナルを送る事もできます。ジョブ番号は「%ジョブ番号」と指定します。
例) kill %2
ジョブ番号はjobsコマンドで確認することができます。先頭の[ ]内の数値がジョブ番号です。
正解の解説について
3478の正解解説について、分かりにくい表現だと感じたので投稿しました。
正解は
・killall -SIGTERM mycommand
・killall -s 15 mycommand
の問題になるのですが、解説を見ると「pkill mycommand」についても同列に扱っているように見えます。
pkillコマンドの解説内容を読むと不正解の意味は分かるのですが、
その前の表記の仕方が「すべて同じ動作をするのに不正解なの?」と見えてしまいます。
私の理解力の問題であれば申し訳ないのですが、一度ご検討をお願いいたします。
該当の解説箇所は下記となります。
解説抜粋ここから
なお、以下のコマンドは全て同じ動作をします。
・pkill mycommand(「mycommand」を含む検索パターン)
・killall mycommand
・killall -15 mycommand
・killall -TERM mycommand
・killall -SIGTERM mycommand
・killall -s 15 mycommand
・killall -s TERM mycommand
・killall -s SIGTERM mycommand
ここまで
・pkill mycommand(「mycommand」を含む検索パターン)
の()内に注記がありますが、これは以下のような意味として受け取り可能と思います。
・pkill mycommand ※「mycommand」を含む検索パターン
・pkill mycommand ←ただしこれは「mycommand」を含む検索パターンのことです
どの表記を採用するかは、好みや感じ方の問題なので、現状のままでもよいのではないでしょうか。
うーん・・・誤答解説にフォローもありますし、明らかに語弊があるとか違和感があるようには感じられないです。
コメント
この投稿に対して返信しませんか?
m michuko0621
2024/01/31 11:51
「「mycommand」コマンドを実行している全てのプロセスをクリーンアップして終了させたい」という問いの選択項目に「pkill mycommand」があり、 その解説に『「pkill mycommand(不正解)」と「killall -SIGTERM mycommand(正解)」と「killall -s 15 mycommand(正解)」は同じ動きをします。』と表記があるのが、ややこしいのでは?という意味合いなのですが、違和感ないですか?? ⇒正直、「同じ動き」をするなら不正解ではないのでは。。?と感じてしまいます。