問題背景
當我們在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