Linux bg/fg/jobs/disown命令运行后台任务

背景

我们经常需要服务器上面执行一些耗时操作,比如执行scp命令下载大文件等,但是又不想一直等待完成再做其他事情,所以可以配合linux的相关命令达到目的。

具体步骤

1.执行相关耗时操作命令

:/ scp -r xxx@ip:/mnt/xxx /localpath/xxx

2.按下ctrl+z命令挂起执行程序,暂停运行

:/ ctrl+z

看到如下反馈:

序号(不是pid)       状态                  执行的命令
------------------------------------------------------------------
[1]+               stopped              scp -r xxx@ip:/mnt/xxx /localpath/xxx

3.可以利用jobs命令,查看当前暂停的任务或在后台运行的任务,反馈如下

:/ jobs

看到如下反馈:

序号(不是pid)       状态                  执行的命令
------------------------------------------------------------------
[1]+               stopped              scp -r xxx@ip:/mnt/xxx /localpath/xxx

4.利用bg %[job_id],将该挂起的执行程序转为后台运行

:/ bg %1

看到如下反馈:

序号(不是pid)       状态                  执行的命令
------------------------------------------------------------------
[1]+               running              scp -r xxx@ip:/mnt/xxx /localpath/xxx

5.如果想将该执行程序转到前台来运行,则执行fg+%[job_id]

:/ fg %1

此时程序将转为前台运行

[重要]利用disown -h+%[job_id]命令,忽略该作业的HUP信号

通俗说就是当shell退出或断开后,后台任务继续不中断执行。该命令运行在bg+%[序号]之后

该命令的详细说明,如下:

就是将指定作业序号的作业从作业列表中删除,在shell退出的时候将其作为init的子进程继续执行。
实际的应用中,比如我们在运行一条用时比较长的命令的时候,忽然临时需要登出系统或者关闭shell,而在当时运行这个命令时没有考虑到要提交为作业放到后台运行。可以如下操作:

1.可以先用Ctrl+z来挂起当前进程,使用jobs获得作业号.
2.利用bg %[job_id]后台继续运行该命令.
3.然后再使用disown -h %[job_id]来切断这个命令与当前shell进程的联系.
4.这样就可以避免shell关闭的时候会中断命令的执行.

# 切断与当前shell联系
disown -h %1

# 此时退出命令运行不会中断
exit

你可能感兴趣的:(Linux bg/fg/jobs/disown命令运行后台任务)