Ubuntu 如何終止一個循環進程的方法

問題背景

 當我們在Linux環境下使用.sh腳本進行命令循環的時候,例如:

#!/bin/bash
while [ 1 ]
do
echo '這裏可以是任意的命令'
done

我們的目的是當其中的命令掛了的時候可以自動啓動,我們的目的很明確,但是當我們不需要這個命令的時候就需要將其關閉。

當我們的命令行沒有關閉的時候很簡單,ctrl+c停止執行就好了,但是當我們關了命令行,或者是通過系統雙擊打開腳本的情況下如何進行操作呢?

方法

ps fjx

 這個是使用"樹"的形式來顯示系統進程的命令,結果大致如下:

PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
 3303  3327  3327  3327 tty2      3327 Ssl+  1000   0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session --se
 3327  3336  3327  3327 tty2      3327 Sl+   1000   0:00  \_ /usr/lib/gnome-session/gnome-session-binary --session=ubuntu
 3336  3423  3423  3423 ?           -1 Ss    1000   0:21  \_ /usr/bin/ssh-agent/usr/bin/im-launch env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session
 3336  3628  3327  3327 tty2      3327 Sl+   1000   0:10  \_ /usr/lib/gnome-settings-daemon/gsd-power
 5291  6098  6098  6098 pts/4    23775 Ss    1000   0:00  \_ /bin/zsh
 6098 23775 23775  6098 pts/4    23775 Sl+   1000  11:52  | \_/home/xx/anaconda3/bin/python
23775 23814 23775  6098 pts/4    23775 Z+    1000  39:53  |       \_ [java] <defunct>
 5291 10604 10604 10604 pts/1    10604 Ss+   1000   0:02  \_ /bin/zsh
 5291  5846  5846  5846 pts/3     8678 Ss    1000   0:00  \_ /bin/zsh
 5846  8678  8678  5846 pts/3     8678 R+    1000   0:00      \_ ps fjx

這個時候就簡單了,找的你運行的bash(這裏我用的是zsh,一般是bash)以及bash中的命令

 5291  6098  6098  6098 pts/4    23775 Ss    1000   0:00  \_ /bin/zsh
 6098 23775 23775  6098 pts/4    23775 Sl+   1000  11:52  | \_/home/xx/anaconda3/bin/python
23775 23814 23775  6098 pts/4    23775 Z+    1000  39:53  |       \_ [java] <defunct>

就像這個bash中運行的是python腳本,如果想停止這個進程,簡單的

#kill PID(python進程)
kill 6098

是沒有用的,它會不斷的循環執行

例如圖中,只有kill bash進程纔可以

# kill PID(bash的進程) 
kill 5291

到這裏就好啦

不知道是不是我百度的方法不對,好像沒找到這種方法

谷歌之後看到的方法參考:how-to-stop-a-bash-while-loop-running-in-the-background

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章