linux job control,工作管理

&

通过**&**可以直接将命令丢到背景中运行,比如我们要将 /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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 移出最近一个正在执行的后台任务
$ disown

# 移出所有正在执行的后台任务
$ disown -r

# 移出所有后台任务
$ disown -a

# 不移出后台任务,但是让它们不会收到SIGHUP信号
$ disown -h

# 根据jobId,移出指定的后台任务
$ disown %2
$ disown -h %2

欢迎关注我的其它发布渠道