将正在运行的Linux前台任务切换到后台
需求
Linux用户有时有这样的需求:
使用终端执行一个程序,之后发现这个任务需要执行很长时间,但是因为已经执行一段时间了不想中断后重新执行,为了避免终端超时等原因任务被中断,想把正在执行的任务切换到后台继续运行。
可以按照本文介绍的方法操作。
方法
假设,前台执行了一个长任务:
[fairyfar@test-1 ~]$ sleep 1000s
Step 1. 使用Ctrl + Z将上述任务切换到后台:
[fairyfar@test-1 ~]$ sleep 1000s [1]+ Stopped sleep 1000s
Step 2. 使用jobs命令可以查看所有后台任务:
[fairyfar@test-1 ~]$ jobs [1]+ Stopped sleep 1000s
使用ps可以看到该进程已经切换到后台,并且处于Stopped状态(T状态):
[fairyfar@test-1 ~]$ ps ux | grep sleep fairyfar 82006 0.0 0.0 108056 360 pts/0 T 17:28 0:00 sleep 1000s
Step 3. 使用disown命令将后台任务从当前Shell的作业列表中移除:
[fairyfar@test-1 ~]$ disown %1 -bash: warning: deleting stopped job 1 with process group 82006 [fairyfar@test-1 ~]$ ps ux | grep sleep fairyfar 82006 0.0 0.0 108056 360 pts/0 T 17:28 0:00 sleep 1000s
Step 4. 此时该任务仍然处于Stop状态,需要让其继续运行,可以通过发送SIGCONT信号(对应-18)使任务继续运行:
[fairyfar@test-1 ~]$ kill -SIGCONT 82006 # 或者kill -18 82006 [fairyfar@test-1 ~]$ ps ux | grep sleep fairyfar 82006 0.0 0.0 108056 360 pts/0 S 17:28 0:00 sleep 1000s
可以看到,任务已经继续运行(S状态)。
此时可以尝试断开客户端连接,重新连接可以看到任务仍然在后台运行。
总结
就4步:
Ctrl+Z切换到后台。- 使用
jobs查询后台任务编号。 - 使用
disown %JobId从当前终端“脱钩”。 kill -SIGCONT <PID>使任务继续运行。
相关内容
打赏作者以资鼓励:
![]() | ![]() |

