このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:ジョブ・プロセスの終了

ジョブ・プロセスの終了

 Linuxシステムを操作していると、誤ってコマンドを実行してしまったり、プログラムがフリーズして操作を受け付けなくなることがあります。そのような場合、ジョブやプロセスを適切に終了させる方法を知っておくことは重要です。ここでは、ジョブおよびプロセスの終了方法について詳しく解説します。

ジョブの終了

 ジョブを終了させる方法は、そのジョブがフォアグラウンドで実行されているか、バックグラウンドで実行されているかによって異なります。

フォアグラウンドジョブの終了

 フォアグラウンドジョブは、ユーザーが直接操作しているコマンドやプログラムです。これを終了させる最も一般的な方法は、Ctrl + Cを押すことです。

操作例

長時間待機するコマンドsleep 10000を実行します。

$ sleep 10000

Ctrl + Cを押すと、コマンドが中断され、シェルに戻ります。

^C

バックグラウンドジョブの終了

 バックグラウンドジョブは、シェルの背後で実行されているコマンドやプログラムで、キーボードからの直接入力を受け付けません。そのため、バックグラウンドジョブを終了させるには、killコマンドを使用します。

【書式】 
kill %[ジョブ番号]

  • %を付けることで、ジョブ番号を指定します。

操作例

1.ジョブを3つ作成し、停止状態にする

1つ目のジョブを作成します。

user01@ubuntu:~$ man bash

Ctrl + Zを押して一時停止します。

[1]+  停止                  man bash

2つ目のジョブを作成します。

user01@ubuntu:~$ sleep 1000

Ctrl + Zを押して一時停止します。

[2]+  停止                  sleep 1000

3つ目のジョブを作成します。

user01@ubuntu:~$ less /etc/crontab

Ctrl + Zを押して一時停止します。

[3]+  停止                  less /etc/crontab

2.現在のジョブ一覧を確認

user01@ubuntu:~$ jobs
[1]   停止                  man bash
[2]-  停止                  sleep 1000
[3]+  停止                  less /etc/crontab

3.特定のジョブを終了

ジョブ番号1man bashを終了する場合

user01@ubuntu:~$ kill %1

[1]   停止                  man bash

4.ジョブの終了を確認

user01@ubuntu:~$ jobs
[1]   終了                  man bash
[2]-  停止                  sleep 1000
[3]+  停止                  less /etc/crontab

 ジョブ[1]が終了したことが確認できます。ジョブが終了すると、上記のように「Terminated」というメッセージが表示されます。環境によっては、日本語で「終了しました」と表示されます。

プロセスの終了

 プロセスを終了させる場合も、killコマンドを使用しますが、ジョブとは異なり、プロセスID(PID)を直接指定します。

【書式】
kill <プロセスID>

  • %を付けずに、プロセスIDをそのまま指定します。

操作例

1.別のターミナルでプロセスを実行

  • ターミナル2でless /etc/crontabを実行し、ファイルを閲覧します。
user01@ubuntu:~$ less /etc/crontab

2.ターミナル1でプロセス一覧を確認

user01@ubuntu:~$ ps xf

出力例

PID    TTY      STAT   TIME   COMMAND
...
4946 ?        Ssl    0:03  \_ /usr/libexec/gnome-terminal-server
4953 pts/0    Ss     0:00      \_ bash
4987 pts/0    T      0:00      |   \_ sleep 1000
4990 pts/0    T      0:00      |   \_ less /etc/crontab
5613 pts/0    R+     0:00      |   \_ ps xf
5547 pts/1    Ss     0:00      \_ bash
5603 pts/1    S+     0:00          \_ less /etc/crontab

プロセスID 5603 がターミナル2で実行中の less /etc/crontab であることが分かります。

3.プロセスを終了

user01@ubuntu:~$ kill 5603

4.プロセスの終了を確認

ターミナル2のless /etc/crontabが終了し、出力がなくなります。

user01@ubuntu:~$ less /etc/crontab 
user01@ubuntu:~$ 

注意点

  • 権限の制限:プロセスを終了できるのは、そのプロセスの所有者(実効ユーザー)のみです。
  • スーパーユーザーrootユーザーは、すべてのプロセスを終了させることができます。

まとめ

  • フォアグラウンドジョブの終了
    Ctrl + C を使用して、実行中のコマンドを終了できます。
  • バックグラウンドジョブの終了
    kill %[ジョブ番号] コマンドを使用し、ジョブ番号を指定して終了します。
  • プロセスの終了
    kill <プロセスID> コマンドを使用し、プロセスIDを指定して終了します。
    ・プロセスIDは ps コマンドなどで確認できます。
  • 権限
    ・自分のジョブやプロセスのみ操作可能。
    ・スーパーユーザーは全てのプロセスを操作可能。

 ジョブとプロセスの終了方法を理解しておくことで、システムの安定性を保ち、効率的に作業を進めることができます。特に、システム管理者としてデーモンやサービスを管理する際には、プロセスの終了操作が必要となる場面が多いため、しっかりと習得しておきましょう。