&
通过**&**可以直接将命令丢到背景中运行,比如我们要将 /etc/ 整个备份成为 /tmp/etc.tar.gz 且不想要等待,那么可以这样做:
tar -zpcf /tmp/etc.tar.gz /etc &
在背景当中运行的命令,如果有 stdout 及 stderr 时,他的数据依旧是输出到萤幕上面的。所以,最佳的状况就是利用数据流重导向, 将输出数据传送至某个文件中。
tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &
jobs
观察目前的背景工作状态。
jobs [-lrs]
选项与参数:
-l :除了列出 job number 与命令串之外,同时列出 PID 的号码;
-r :仅列出正在背景 run 的工作;
-s :仅列出正在背景当中暂停 (stop) 的工作。
fg
将背景工作拿到前景来处理
fg %jobnumber
bg
让工作在背景下的状态变成运行中
➜ ~ jobs; bg %1; jobs
[1] + suspended sh fq.sh
[1] + 10348 continued sh fq.sh
[1] + running sh fq.sh
kill
管理背景当中的工作
kill -9 %2
-9 :立刻强制删除一个工作;
nohup
nohup 可以让你在离线或注销系统后,还能够让工作继续进行。
nohup [命令与参数] <==在终端机前景中工作
nohup [命令与参数] & <==在终端机背景中工作
如果你再次登陆的话,可以使用 pstree 去查阅你的程序。
disown
我们已经知道,如果事先在命令前加上 nohup 就可以在你关闭终端后继续运行程序。但是如果我们未加任何处理就已经提交了命令,该如何补救呢。
disown 它可以将指定任务从”后台任务”列表(jobs命令的返回结果)之中移除。一个”后台任务”只要不在这个列表之中,session 就肯定不会向它发出SIGHUP信号。
1 | # 移出最近一个正在执行的后台任务 |