Linux把一个前台运行的进程放在后台执行

  1. 对于正常执行的前台程序,可以使用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
  1. 使用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 &
  1. 使用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
# 又进入vi 重新编辑文件了
[root@luffy study]#
  1. 对于部分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


Linux把一个前台运行的进程放在后台执行
https://luffy997.github.io/2023/09/07/Linux把一个前台运行的进程放在后台执行/
作者
Luffy997
发布于
2023年9月7日
许可协议