问题背景
当我们在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