远程服务器任务的管理命令:bg,ctrl-z,nohup,setid和disown

当执行shell脚本或者命令需要很长时间时,一般采用背后运行的方式。下面的命令来帮助完成这些背后运行的工作。

执行背景任务(job)

最简单的方法是在执行的命令后面添加&即可。例如:

# find / -ctime -l > /tmp/changed-file-list.txt &

将目前正在运行的任务放到背景运行

首先利用CTRL+Z暂停改任务,然后利用bg命令放到背景运行。例如:

# find / -ctime -l > /tmp/changed-file-list.txt &
# [CTRL+Z]
[2]+ Stopped find / -ctime -l > /tmp/changed-file-list.txt
# bg

查看后台运行的任务

利用jobs命令可以查看背景运行的任务。另外一个命令ps是查看正在运行的进程,而top是展示所有进程。

# jobs
[1]   Running       bash download-file.sh &
[2]-  Running       evolution &
[3]+  Done          nautilus .

将后台任务放到前台运行

利用fg命令可以将后台任务放到前台运行。

# jobs
[1]   Running       bash download-file.sh &
[2]-  Running       evolution &
[3]+  Done          nautilus .
# fg %1

终止后台运行任务

利用kill命令。

# kill %2

关闭ssh终端保持任务继续运行

使用两个命令nohup加上&或者setsid。第一个是让提交的命令忽略hangup信号,后者是让我们的任务不属于接受hup信号的终端的子进程。

# nohup ping www.ibm.com &
# ps -ef |grep 3059
root      3059   984  0 21:06 pts/3    00:00:00 ping www.ibm.com
root      3067   984  0 21:06 pts/3    00:00:00 grep 3059

# setsid ping www.ibm.com
# ps -ef |grep www.ibm.com
root     31094     1  0 07:28 ?        00:00:00 ping www.ibm.com
root     31102 29217  0 07:29 pts/4    00:00:00 grep www.ibm.com

另外一种方法利用subshell的小技巧,即将命令和&同时放进()中。如下:

# (ping www.ibm.com &)
# ps -ef |grep www.ibm.com
root     16270     1  0 14:13 pts/4    00:00:00 ping www.ibm.com
root     16278 15362  0 14:13 pts/4    00:00:00 grep www.ibm.com

对于正在运行的任务,可以先用CTRL+Zbg之后,然后利用disown命令。忽略某个任务用-h参数,忽略所有任务用-ah参数,忽略正在运行的用-rh参数。例如:

# disown -h %1
# ps -ef |grep largeFile2
root      5790  5577  1 10:04 pts/3    00:00:00 cp -i -r testLargeFile largeFile2
root      5824  5577  0 10:05 pts/3    00:00:00 grep largeFile2

除非特别声明,文章均为牛会飞的博客原创,遵循署名-非商业使用-相同方式共享授权协议
转载请注明出处: https://blogfei.com/bg-ctrl-z-nohup-setid-and-disown/

已有2条评论