助け合いフォーラム

LinuC

LinuC Lv1-101(Ver10.0)
問題ID : 14766
問題を開く
「mycommand」コマンドのみを実行している全てのプロセスをクリーンアップして終了させたい。適切なコマンドは次のうちどれか。(2つ選択)

正解

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
です。

なお、以下のコマンドは全て同じ動作をします。

・killall mycommand
・killall -15 mycommand
・killall -TERM mycommand
・killall -SIGTERM mycommand
・killall -s 15 mycommand
・killall -s TERM mycommand
・killall -s SIGTERM mycommand

その他の選択肢については次のとおりです。

・killall -T mycommand
killallコマンドに存在しないオプションのため、誤りです。

・kill mycommand
・kill -15 mycommand
これらkillコマンドは、プロセスID(PID)を使用してプロセスにシグナルを送るコマンドですので、誤りです。

参考

プロセスとは、システム上で動作しているプログラムの最小単位のことです。PID(プロセスID)およびプロセス名(コマンド名)はpsコマンドで調べることができます。


また、pgrepコマンドで実行中のプロセスから特定の名前を持つプロセスIDを検索することができます。
pgrepコマンドの書式は以下のとおりです。

pgrep [ オプション ] 検索パターン

実行例:


検索パターンには拡張正規表現が指定できます。-lオプションを使うと、検索パターンにマッチしたプロセス名も表示されます。


-uオプションを使うと、特定のユーザーが実行したプロセスのみを検索対象とすることができます。
例)


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コマンドで確認することができます。先頭の[ ]内の数値がジョブ番号です。
上に戻る

解説に納得がいきません。

投稿日 2025/04/09

したがって正解は
・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」という文字列を含む全てのコマンドを実行しているプ>ロセスが対象となります。よって不適切です。
上記ですが、検索パターンを指定するので、「mycommand」という文字列を含む全てが対象となるため不適切になるということは、ギリギリ納得しました。
しかし、いくら括弧書きで(「mycommand」を含む検索パターン)と書かれていても
「なお、以下のコマンドは全て同じ動作をします。」と言い切った解説をしているにもかかわらず、
pkill mycommandが不正解になるのは納得感がありません。

2025/04/10 16:04

しかし、いくら括弧書きで(「mycommand」を含む検索パターン)と書かれていても
「なお、以下のコマンドは全て同じ動作をします。」と言い切った解説をしている

確かにちょっと気になりますね。

ただLinuxシステムの管理において、基本的にはより安全で確実な方法を選ぶべきだと思われます。予期せぬプロセスを誤って終了させてしまうリスクは避けるべきで、コマンド名が似ているだけのプロセスまで終了させてしまうのは危険です。


コメント

t t-funaki

2025/04/10 16:45

ご返信ありがとうございます。 実際の管理においてはおっしゃる通りだと思いますので、以後気を付けたいと思います。 ただ、本サイト(LinuC自体なのかもしれませんが)では正直なところ実際の操作や厳密な理解という点では少し粗があると思っており、「まああくまで試験対策として割り切ろう」と思っていたところでした。そんな折、本問題をみて実際の試験問題として仮に全く同じ問題が出てきたときに選択肢としてpkillは外すべきなのか否かがわかりづらい解説だったため気になってしまいました。

t t-funaki

2025/04/10 16:53

全く同じと記載しましたが、問題に選択肢の数が指定されておらず全て選べなどとなっていた場合です。

t t-funaki

2025/04/10 17:33

度重なる追記申し訳ございません。 たまたまコマ問を解いていて以下問題が出ました。(ちなみに回答欄は2つです。) >mycomコマンドを実行している全てのプロセスをクリーンアップして終了させたい。 >適切なコマンドをアルファベット順に回答せよ(シグナルの指定はなるべく省略すること) 正解は、 ` killall mycom ` ` pkill mycom ` (シグナルの指定はなるべく省略すること。)で察するしかないということでしょうか?

この返信に対して
コメントを記入できます

スタッフからの返信

s staff_ueda

2025/04/14 15:07

t-funaki様 m7jgc様 ご指摘の点を修正いたしました。 ご報告いただきまして、誠にありがとうございます。

この投稿に対して返信しませんか?