对于正常执行的前台程序,可以使用ctrl + z,让程序停止,然后通过bg %job_id 把程序放入后台运行
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@luffy study]# bash sleep500S.sh ^Z [1]+ 已停止 bash sleep500S.sh [root@luffy study]# jobs [1]+ 已停止 bash sleep500S.sh [root@luffy study]# jobs ; bg %1 ; jobs [1]+ 已停止 bash sleep500S.sh [1]+ bash sleep500S.sh & [1]+ 运行中 bash sleep500S.sh & [root@luffy study]# ps aux | grep sleep root 15527 0.0 0.0 113280 1204 pts/5 S 18:10 0:00 bash sleep500S.sh root 15528 0.0 0.0 108052 360 pts/5 S 18:10 0:00 sleep 500s root 15826 0.0 0.0 112824 984 pts/5 S+ 18:11 0:00 grep --color=auto sleep
使用nohup 程序执行命令 &,直接让程序后台执行
1 2 3 4 5 6 7 [root@luffy study]# nohup bash sleep500S.sh & [2] 16007 [root@luffy study]# nohup : 忽略输入并把输出追加到"nohup.out" [root@luffy study]# jobs [1]- 运行中 bash sleep500S.sh & [2]+ 运行中 nohup bash sleep500S.sh &
使用fg 让程序重新回到前台执行。比如vi 编辑文件的时候,想退出了查个东西,然后再进入编辑。就可以在编辑的时候 ctrl + z,然后事情办完后,再通过fg %job_id进去
1 2 3 4 5 6 7 8 9 10 11 [root@luffy study]# vi a [3]+ 已停止 vi a [root@luffy study]# jobs [1]+ 已停止 bash sleep500S.sh [2] 运行中 nohup bash sleep500S.sh & [3]- 已停止 vi a [root@luffy study]# fg %3 vi a [root@luffy study]#
对于部分job不能停掉的,可以使用kill 命令,格式:kill -signal %jobnumber
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@study ~]# kill -signal %jobnumber [root@study ~]# kill -l 选项与参数: -l :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些? signal :代表给予后面接的那个工作什么样的指示啰!用 man 7 signal 可知: -1 :重新读取一次参数的配置文件 (类似 reload); -2 :代表与由键盘输入 [ctrl]-c 同样的动作; -9 :立刻强制删除一个工作; -15:以正常的进程方式终止一项工作。与 -9 是不一样的。 root@luffy study]# jobs [1]+ 已停止 bash sleep500S.sh [root@luffy study]# kill -15 %1 [1]+ 已停止 bash sleep500S.sh [root@luffy study]# jobs [1]+ 已终止 bash sleep500S.sh [root@luffy study]# jobs [root@luffy study]#
当然使用kill -9 也行,这种比较暴力,-9 这个 signal 通常是用在『强制删除一个不正常的工作』时所使用的, -15 则是 以正常步骤结束一项工作(15 也是默认值),两者之间并不相同呦!举上面的例子来说, 我用 vim 的 时候,不是会产生一个 .filename.swp 的文件吗? 那么,当使用 -15 这个 signal 时, vim 会尝试 以正常的步骤来结束掉该 vi 的工作, 所以 .filename.swp 会主动的被移除。但若是使用 -9 这个 signal 时,由于该 vim 工作会被强制移除掉,因此, .filename.swp 就会继续存在文件系统当中
如果无法通过 kill -15 结束job, 可以使用kill -9 job