MotoJapan's Tech-Memo

技術めも

Linuxのジョブ/プロセス(jobs/process)関連のコマンドまとめ (起動、中断、終了、検索、ジョブ強制終了、ログアウト継続実行)

ubuntu/raspberry piでの開発で重宝しているコマンドを覚書
今回は、hoge.pyというスクリプトを例にとる

プロセスを起動する方法

$ python hoge.py   #フォアグラウンド
$ python hoge.py & #バックグランド
[1] 20664          # [ジョブID]プロセスID

特定のプロセスを検索する方法

hoge.pyを検索する場合

$ ps aux | grep hoge.py
pi       20664  100  0.5   8992  4992 pts/0    R    15:44   4:01 python hoge.py
pi       20744  100  0.5   8992  4916 pts/0    R    15:46   2:30 python hoge.py
pi       20745  3.1  0.5   8992  4928 pts/0    T    15:46   0:04 python hoge.py
pi       20903  0.0  0.1   4272  1844 pts/0    S+   15:48   0:00 grep --color=auto hoge.py

3回実行しているとこんな感じ

フォアグラウンドのプロセスを終了する方法

python hoge.pyを実行中に下記コマンド

ctrl+c 強制終了 ジョブにから消える
ctrl+z 中断 ジョブに残る(Stopped)

バックグランドのプロセスを終了する方法

方法1. python hoge.py &を実行すると、実行直後のログに" [ジョブID]プロセスID "が出力されるのでそれをメモしてkill
方法2. プロセスを検索してkill

プロセスを検索する

$ ps aux | grep hoge.py

ここで見つかるプロセスIDをメモ

プロセスkill

$ sudo kill プロセスID

ジョブを確認する方法

現在のジョブを確認するコマンドは下記

$ jobs
[1]   Running                 python hoge.py &
[2]-  Running                 python hoge.py &
[3]+  Stopped                 python hoge.py

Ctrl+Zで終わるとstatusが[Stopped]になっている
これを再起動したり、強制終了させる方法は下記

中断したジョブをフォアグラウンド/バックグラウンドで再開する方法

フォアグラウンドで再開する場合

$ fg %ジョブ番号

バックグラウンドで再開する場合

$ bg %ジョブ番号

ジョブの切り替えは下記
Stoppedのジョブをバックグランドで再開し、フォアグラウンドに切り替える場合

$ bg %ジョブ番号 # バックグランドで再開
$ fg %ジョブ番号 # バックグランドからフォアグラウンドに切り替え

中断したジョブを強制終了する方法

中断した場合はstatusがstoppedになるので、ジョブを終了する

$ sudo kill %ジョブ番号

※実際に即ジョブが強制終了されるわけではないので、少し待つ

ログアウト後もコマンドを実行する方法

sshで繋いでいると切りたくなることがある
(私の場合、特に機械学習とか)
下記コマンドで可能

sudo nohup python hoge.py &

ログアウト後も実行しているコマンドを終了する方法

バックグランドのプロセスを終了する方法と同じ