助け合いフォーラム
LPIC Lv1-101(Ver5.0)
問題ID : 3477
問題を開く
プロセスIDが5884のプロセスを強制的に終了させたい。適切なコマンドは次のうちどれか。(2つ選択)
正解
kill -9 5884
kill -SIGKILL 5884
解説
シグナルは、プロセスに終了・一時停止・再開などを通知する仕組みです。
PID(プロセスID)を使用してプロセスにシグナルを送るにはkillコマンドを利用します。
killコマンドの書式と主なシグナル名およびシグナル番号は以下のとおりです。
kill [-シグナル名または-シグナル番号] プロセスID
または
kill -s シグナル名またはシグナル番号 プロセスID

SIGTERMは終了要求で、プロセス側で無視できます。SIGKILLは無視できないため、強制的に終了させるにはSIGKILLを指定します。
したがって、正解は
・kill -9 5884
・kill -SIGKILL 5884
です。
KILL(SIGKILL)シグナルは、TERM(SIGTERM)シグナルでも終了できなかった異常な状態のプロセスを強制的に終了する場合などに使用します。
TERM(SIGTERM)シグナルは、プロセスへの終了要求です。終了前にファイルへの保存などの後始末(クリーンアップ)を行うかどうかは、プログラム側の処理によります。KILL(SIGKILL)シグナルではクリーンアップ処理を行えないため、データを失う可能性があります。
なお、以下のコマンドは全て同じ動作をします。
・kill -9 5884
・kill -KILL 5884
・kill -SIGKILL 5884
・kill -s 9 5884
・kill -s KILL 5884
・kill -s SIGKILL 5884
その他の選択肢については、以下のとおりです。
・kill -HUP 5884
HUP(SIGHUP)は、端末との接続が切れたことを通知するシグナルです。
・kill -15 5884
15は終了を要求するTERMシグナルの番号です。
・kill -s SIGTERM 5884
SIGTERMは終了を要求するシグナルです。
PID(プロセスID)を使用してプロセスにシグナルを送るにはkillコマンドを利用します。
killコマンドの書式と主なシグナル名およびシグナル番号は以下のとおりです。
kill [-シグナル名または-シグナル番号] プロセスID
または
kill -s シグナル名またはシグナル番号 プロセスID

SIGTERMは終了要求で、プロセス側で無視できます。SIGKILLは無視できないため、強制的に終了させるにはSIGKILLを指定します。
したがって、正解は
・kill -9 5884
・kill -SIGKILL 5884
です。
KILL(SIGKILL)シグナルは、TERM(SIGTERM)シグナルでも終了できなかった異常な状態のプロセスを強制的に終了する場合などに使用します。
TERM(SIGTERM)シグナルは、プロセスへの終了要求です。終了前にファイルへの保存などの後始末(クリーンアップ)を行うかどうかは、プログラム側の処理によります。KILL(SIGKILL)シグナルではクリーンアップ処理を行えないため、データを失う可能性があります。
なお、以下のコマンドは全て同じ動作をします。
・kill -9 5884
・kill -KILL 5884
・kill -SIGKILL 5884
・kill -s 9 5884
・kill -s KILL 5884
・kill -s SIGKILL 5884
その他の選択肢については、以下のとおりです。
・kill -HUP 5884
HUP(SIGHUP)は、端末との接続が切れたことを通知するシグナルです。
・kill -15 5884
15は終了を要求するTERMシグナルの番号です。
・kill -s SIGTERM 5884
SIGTERMは終了を要求するシグナルです。
参考
【プロセスの検索】
プロセスとは、システム上で動作しているプログラムの最小単位のことです。psコマンドは実行中のプロセスを一覧表示します。PID(プロセスID)やプロセス名(コマンド名)を確認できます。

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

検索パターンには、複数の文字列を記号で表す拡張正規表現が指定できます。以下の(as|ss)hは、ashまたはsshに一致します。-lオプションを使うと、検索パターンにマッチしたプロセス名も表示されます。

■ユーザーを指定して検索
特定のユーザーが実行したプロセスや、特定の権限で動作するプロセスも検索できます。
-Uオプションは実ユーザーで、-uオプションは実効ユーザーで検索します。実ユーザーはプロセスを起動したユーザー、実効ユーザーはプロセスの権限の判定に使われるユーザーです。
指定にはユーザー名のほか、実ユーザーの識別番号(UID)や実効ユーザーの識別番号(EUID)も使えます。
以下は、sudoで別のユーザーとして実行する例と、SUID(実行ファイルの所有者の権限で動作させる設定)によって実効ユーザーが変わる例です。

【シグナルによるプロセスの制御】
psやpgrepで調べたPIDは、killコマンドの送信先に指定できます。
kill、killall、pkillコマンドで、プロセスに終了や一時停止などを通知するシグナルを送ることができます。kill、killall、pkillコマンドの書式と主なシグナル名およびシグナル番号は以下のとおりです。
■kill:PIDで指定
kill [-シグナル名または-シグナル番号] プロセスID
または
kill -s シグナル名またはシグナル番号 プロセスID
■killall:プロセス名で指定
killall [-シグナル名または-シグナル番号] プロセス名(コマンド名)
または
killall -s シグナル名またはシグナル番号 プロセス名(コマンド名)
■pkill:プロセス名のパターンで指定
pkill [-シグナル名または-シグナル番号] プロセス名(コマンド名)
または
pkill --signal シグナル名またはシグナル番号 プロセス名(コマンド名)
kill・killallの-sとpkillの--signalは、シグナルを指定するオプションです。その後のシグナル名・番号にはハイフンを付けません。例えば、pkill -TERM mycommandとpkill --signal TERM mycommandは同じ動作です。
シグナルを指定しない場合は、kill、killall、pkillのいずれもSIGTERM(15)を送ります。

killコマンドはプロセスID(PID)を指定してシグナルを送ります。PIDは複数指定できます。
killallコマンドはプロセス名(コマンド名)を使用して、同じプロセス名の全てのプロセスに対してシグナルを送ります。
例) kill -SIGHUP 1133
例) killall -SIGHUP mycommand
また、pkillコマンドでは、プロセス名を拡張正規表現で指定できます。killallコマンドでも、-rオプションを付けると同様に指定できます。
例) killall -r 'mycommand[23]'
例)

■ジョブ番号で指定
また、killコマンドはジョブ番号を指定し、ジョブにシグナルを送ることもできます。ジョブ番号は「%ジョブ番号」と指定します。
例) kill %2
ジョブ番号はjobsコマンドで確認することができます。先頭の[ ]内の数値がジョブ番号です。
プロセスとは、システム上で動作しているプログラムの最小単位のことです。psコマンドは実行中のプロセスを一覧表示します。PID(プロセスID)やプロセス名(コマンド名)を確認できます。

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

検索パターンには、複数の文字列を記号で表す拡張正規表現が指定できます。以下の(as|ss)hは、ashまたはsshに一致します。-lオプションを使うと、検索パターンにマッチしたプロセス名も表示されます。

■ユーザーを指定して検索
特定のユーザーが実行したプロセスや、特定の権限で動作するプロセスも検索できます。
-Uオプションは実ユーザーで、-uオプションは実効ユーザーで検索します。実ユーザーはプロセスを起動したユーザー、実効ユーザーはプロセスの権限の判定に使われるユーザーです。
指定にはユーザー名のほか、実ユーザーの識別番号(UID)や実効ユーザーの識別番号(EUID)も使えます。
以下は、sudoで別のユーザーとして実行する例と、SUID(実行ファイルの所有者の権限で動作させる設定)によって実効ユーザーが変わる例です。

【シグナルによるプロセスの制御】
psやpgrepで調べたPIDは、killコマンドの送信先に指定できます。
kill、killall、pkillコマンドで、プロセスに終了や一時停止などを通知するシグナルを送ることができます。kill、killall、pkillコマンドの書式と主なシグナル名およびシグナル番号は以下のとおりです。
■kill:PIDで指定
kill [-シグナル名または-シグナル番号] プロセスID
または
kill -s シグナル名またはシグナル番号 プロセスID
■killall:プロセス名で指定
killall [-シグナル名または-シグナル番号] プロセス名(コマンド名)
または
killall -s シグナル名またはシグナル番号 プロセス名(コマンド名)
■pkill:プロセス名のパターンで指定
pkill [-シグナル名または-シグナル番号] プロセス名(コマンド名)
または
pkill --signal シグナル名またはシグナル番号 プロセス名(コマンド名)
kill・killallの-sとpkillの--signalは、シグナルを指定するオプションです。その後のシグナル名・番号にはハイフンを付けません。例えば、pkill -TERM mycommandとpkill --signal TERM mycommandは同じ動作です。
シグナルを指定しない場合は、kill、killall、pkillのいずれもSIGTERM(15)を送ります。

killコマンドはプロセスID(PID)を指定してシグナルを送ります。PIDは複数指定できます。
killallコマンドはプロセス名(コマンド名)を使用して、同じプロセス名の全てのプロセスに対してシグナルを送ります。
例) kill -SIGHUP 1133
例) killall -SIGHUP mycommand
また、pkillコマンドでは、プロセス名を拡張正規表現で指定できます。killallコマンドでも、-rオプションを付けると同様に指定できます。
例) killall -r 'mycommand[23]'
例)

■ジョブ番号で指定
また、killコマンドはジョブ番号を指定し、ジョブにシグナルを送ることもできます。ジョブ番号は「%ジョブ番号」と指定します。
例) kill %2
ジョブ番号はjobsコマンドで確認することができます。先頭の[ ]内の数値がジョブ番号です。
HUP、INTのクリーンアップ有無について
k
kz5835
投稿日 2023/08/28
この問題は、プロセスをクリーンアップせずに強制的に終了する
コマンドについて問われています。
これに対して、kill -HUP 5884 が誤りとされています。
上記からは、HUPのシグナルは、「プロセスをクリーンアップして終了」
ということになると思うのですが、その様な理解で正しいでしょうか。
また、INTのシグナルについても、解説の表で、クリーンアップに
ついての情報は記載されていませんが、INTは、終了前に
プロセスをクリーンアップする/しないでいうと、どちらになる
でしょうか。
ご存じの方がおられましたら、教えて下さい。
宜しくお願いします。
2023/08/29 09:16
上記からは、HUPのシグナルは、「プロセスをクリーンアップして終了」
ということになると思うのですが、その様な理解で正しいでしょうか。
命題の逆が真になるとは限りません。
https://mondai.ping-t.com/g/posts/991 のご質問については、結局どのように理解されたのでしょうか?
コメント
この投稿に対して返信しませんか?
k kz5835
2023/09/18 14:18
arashi1977様 ご回答、有難うございます。連絡が遅くなりすみません。 >https://mondai.ping-t.com/g/posts/991 のご質問については >結局どのように理解されたのでしょうか? いただきました 「SIGHUPは「ハングアップ」の目的であって、終了させることはあっても 起動させるというものではない」との情報から、HUPはプロセスを終了させる ことが意図されたシグナルと理解しておりました。 また、受け取ったプロセスがどの様に動作するかはプログラム次第との 情報から、この問題は、実際に受け取ったプロセスがどう動くかではなく シグナルの定義を問うていると理解しました。 問題文は 「プロセスをクリーンアップせずに強制的に終了させたい」ものが 問われており、「プロセスを終了させるシグナル」--(A)については ①プロセスをクリーンアップせずに強制的に終了=>正解 ②プロセスをクリーンアップして強制的に終了=>誤答 のいずれかになると理解しました。 SIGHUPは(A)に該当し、①に該当しないということなので ②になる(②以外の可能性はない)と推測し、質問させて頂きました。 今回頂きました情報は、SIGHUPは①でも②でもないという ことでしょうか。 すみませんが、教えて下さい。