1. 概要

プロセスを強制終了する方法はいくつかあります– タスク– とも呼ばれ、それらのほとんどはターミナルでコマンドを実行することを含みます。

このチュートリアルでは、バックグラウンドプロセスに関連する方法に焦点を当てます。

2. 始める前に

2.1. killコマンド

Linuxでプロセスを強制終了するために使用される基本的なコマンドはkillです。 このコマンドは、プロセスのID、または終了するPID と連動して機能します。

PIDに加えて、後で説明するように、他の識別子を使用してプロセスを終了することもできます。

kill コマンドは、終了信号を取り込みます。これは、いくつかの値のいずれかを持つことができます。

  • SIGINT(2)–端末で Ctrl +Cを押した場合と同じ結果になります。 プロセスが自動的に終了することはありません
  • SIGQUIT(3)– SIGINTと同じことを行いますが、コアダンプを生成するという追加の利点があります
  • SIGKILL(9)–プロセスを強制的に終了します。 無視したり、正常にシャットダウンしたりすることはできません
  • SIGTERM(13)–プロセスを終了しますが、正常にシャットダウンする時間を与えます

終了信号を指定しない場合は、デフォルトのSIGTERM(13)が使用されます。

2.2. 背景対。 前景

また、バックグラウンドプロセスとフォアグラウンドプロセスの違いに注意してください

フォアグラウンドプロセスは、次のように、直接実行して完了するのを待つコマンドまたはプロセスです。

$ ls -l
total 716
-rwxr-xr-x 1 root root 1563 oct 23 2016 espdiff
-rwxr-xr-x 1 root root 117104 sep 26 2019 gnome-mahjongg
-rwxr-xr-x 1 root root 125304 sep 13 2019 gnome-mines
-rwxr-xr-x 1 root root 178712 sep 10 2019 gnome-sudoku
-rwxr-xr-x 1 root root 302336 sep 15 2019 sol

一方、バックグラウンドプロセスは、シェルが待機しないプロセスです。 バックグラウンドプロセスを実行するには、「 &」 プロセスの最後に開始したいもの:

$ ./myScript.sh &

3. 実際にプロセスを停止する方法

最初に述べたように、ほとんどの場合、 kill コマンドと組み合わせてPIDが必要ですが、これから説明するように、それが唯一の方法ではありません。

3.1. ps

psコマンドは、Linuxのプロセスを一覧表示するために使用されます。 ここでは、 -eaf を追加して、必要な情報を取得します。

$ ps -eaf
UID                      PID    PPID  C STIME TTY          TIME CMD
baeldung-reader         3208    2578  0 14:20 ?        00:00:01 /usr/share/skypeforlinux/sky
baeldung-reader         3226    2578  2 14:20 ?        00:00:06 /snap/slack/24/usr/lib/slack
baeldung-reader         3230    3208  0 14:20 ?        00:00:00 /usr/share/skypeforlinux/sky
baeldung-reader         3232    3230  0 14:20 ?        00:00:00 /usr/share/skypeforlinux/sky
baeldung-reader         3277    3208  0 14:20 ?        00:00:00 /usr/share/skypeforlinux/sky
baeldung-reader         3280    3208  0 14:20 ?        00:00:00 /usr/share/skypeforlinux/sky
baeldung-reader         3325    3208  3 14:20 ?        00:00:08 /proc/self/exe --type=render
baeldung-reader         3363    3226  0 14:20 ?        00:00:00 /snap/slack/24/usr/lib/slack
baeldung-reader         3398    3226  0 14:20 ?        00:00:00 /snap/slack/24/usr/lib/slack
baeldung-reader         3411    2578 12 14:20 ?        00:00:29 /opt/google/chrome/chrome
baeldung-reader         3417    3411  0 14:20 ?        00:00:00 cat
baeldung-reader         3418    3411  0 14:20 ?        00:00:00 cat
baeldung-reader         3423    3226  0 14:20 ?        00:00:00 /snap/slack/24/usr/lib/slack
baeldung-reader         3426    3411  0 14:20 ?        00:00:00 /opt/google/chrome/chrome --
baeldung-reader         3428    3411  0 14:20 ?        00:00:00 /opt/google/chrome/chrome --
baeldung-reader         3429    3428  0 14:20 ?        00:00:00 /opt/google/chrome/nacl_help
baeldung-reader         3432    3428  0 14:20 ?        00:00:00 /opt/google/chrome/chrome --
baeldung-reader         3434    3426  0 14:20 ?        00:00:00 /opt/google/chrome/nacl_help
baeldung-reader         3441    3208  0 14:20 ?        00:00:00 /usr/share/skypeforlinux/sky
baeldung-reader         3456    3226  5 14:20 ?        00:00:12 /snap/slack/24/usr/lib/slack
baeldung-reader         3482    3411  1 14:20 ?        00:00:03 /opt/google/chrome/chrome --
baeldung-reader         3531    3426  3 14:20 ?        00:00:09 /opt/google/chrome/chrome --
baeldung-reader         3533    3531  0 14:20 ?        00:00:00 /opt/google/chrome/chrome --
baeldung-reader         3603    3432  3 14:20 ?        00:00:07 /opt/google/chrome/chrome --
baeldung-reader         3617    3432  3 14:20 ?        00:00:08 /opt/google/chrome/chrome --
baeldung-reader         3631    3432  0 14:20 ?        00:00:01 /opt/google/chrome/chrome --
baeldung-reader         3870    3432  5 14:21 ?        00:00:11 /opt/google/chrome/chrome --
baeldung-reader         3892    3432 25 14:21 ?        00:00:57 /opt/google/chrome/chrome --
baeldung-reader         3905    2892  9 14:21 ?        00:00:22 ./jetbrains-toolbox --minimi

psを実行した後、終了するプロセスのPIDを視覚的にスキャンし、killコマンドを実行してPIDを渡します。

$ sudo kill -9 3905

3.2. pgrep

pgrepコマンドは名前でプロセスを検索し、一致するたびにPIDを返します

$ pgrep chrome
733
3638
11679
11736
11776
11848
11850
12193
12208
12240
12275
14705
17372
18003
18378
18526
18540
18736
22401
23844
$ sudo kill -9 733

3.3. pkill

pkillは、プロセス名を使用して、バックグラウンドプロセスを直接強制終了できるコマンドの1つです。

たとえば、RabbitMQのすべてのインスタンスを停止する場合は、次を使用できます。

$ sudo pkill rabbitmq

3.4. ジョブ

プロセスを強制終了する別の方法は、そのジョブ番号を使用することです。 これは、jobsコマンドが役立つところです。

まず、いくつかのジョブを開始しましょう。

$ sleep 100 &
[1] 24827
$ sleep 200 &
[2] 24832

各コマンドの後に、ジョブIDとPIDが表示されることに注意してください。

ジョブを使用してそれらを一覧表示できます。

$ jobs
[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &

そしてジョブIDで殺すことができます:

$ kill %1 # Here 1 is the job number. We can also kill job number 2 if we want in the same way
$ jobs
[1]-  Terminated              sleep 100
[2]+  Running                 sleep 200 &

3.5. killall

プロセスのPIDを使用するkill、とは対照的に、 killallコマンドは名前を取り、暗黙的に、その名前を持つすべてのプロセスを強制終了します。

これは、たとえば、複数のタブが開いているフリーズしたWebブラウザ(ChromeやFirefoxなど)がある場合に便利です。 ブラウザで実行されているすべてのプロセスを簡単に強制終了し、次を使用して閉じることができます。

$ killall chrome
$ killall firefox

4. ボーナス

4.1. fg

fgは、バックグラウンドプロセスをフォアグラウンドにするために使用されるコマンドです。 次に、 Ctrl + C を使用してプロセスを停止できます。

$ sleep 100 &
[1] 25994
$ jobs
[1]+  Running sleep 100 &
$ fg 1
sleep 100
^C
$

4.2. システムモニター

プロセスを終了する別の方法は、システムモニターを起動することです。これは、LinuxでWindowsタスクマネージャーに相当します。 それを起動するには、次を実行します。

$ gnome-system-monitor

マシンにインストールされていない場合は、次を使用してインストールします。

$ sudo apt-get install gnome-system-monitor

システムモニターでは、現在実行中のすべてのプロセスのリストを確認できます。 プロセスを強制終了するには、そのリストをナビゲートし、プロセスを右クリックして、killオプションを選択します。

5. 結論

この記事では、Linuxでバックグラウンドプロセスを強制終了する方法を学びました。

Linuxエコシステムのさまざまなコマンドを使用して、さまざまな方法でプロセスを強制終了できます。 また、端末に入力したくない場合は、代わりにいつでもシステムモニターを使用できます。