& 后台执行命令

 

 

当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。

可以使用&命令把作业放到后台执行。

该命令的一般形式为:

命令&

为什么要在后台执行命令?因为当在后台执行命令时,可以继续使用你的终端做其他事

情。适合在后台运行的命令有find、费时的打印作业、费时的排序及一些shell脚本。在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻

等。不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行

的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:

command >out.file 2>&1 &

在上面的例子中,所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。

1.1 向后台提交命令

现在我们运行一个find命令,查找名为“srm.conf”的文件,并把所有标准输出和错误输

出重定向到一个叫作find.dt的文件中:

$ find /etc -name "srm.conf" -print >find.at 2>&1 &

[1]27015

在上面的例子中,在我们成功提交该命令之后,系统给出了它的进程号27015。

当该作业完成时,按任意键(一般是回车键)就会出现一个提示:

[1]+Done find /etc "srm.conf" -print

这里还有另外一个例子,有一个叫做p s 1的脚本,它能够截断和清除所有的日志文件,我

把它放到后台去执行:

$ psl &

[2]28535

1.2 用ps命令查看进程

当一个命令在后台执行的时候,可以用提交命令时所得到的进程号来监控它的运行。在

前面的例子中,我们可以按照提交p s 1时得到的进程号,用p s命令和grep命令列出这个进程:

$ ps X |grep 28305

28305 pl S 0:00 sh /root/psl

28305 ps S 0:00 grep 28305

如果系统不支持ps x命令,可以用:

$ps -ef |grep 28305

root 28305 21808 0 10:24:39 pts/2 0:00 sh psl

root 28356 21808 1 10:24:46 pts/2 0:00 grep 28305

记住,在用p s命令列出进程时,它无法确定该进程是运行在前台还是后台。

1.3 杀死后台进程

如果想杀死后台进程可以使用k i l l命令。当一个进程被放到后台运行时, shell会给出一个进程号,我们可以根据这个进程号,用k i l l命令杀死该进程。该命令的基本形式为:

kill -signal [process_number]

现在暂且不要考虑其中的各种不同信号;我们会在后面的章节对这一问题进行介绍。

在杀进程的时候,执行下面的命令(你的进程号可能会不同)并按回车键。系统将会给出相

应的信息告诉用户进程已经被杀死。

$ kill 28305 

[1]+ Terminated psl

如果系统没有给出任何信息,告诉你进程已经被杀死,那么不妨等一会儿,也许系统正

在杀该进程,如果还没有回应,就再执行另外一个kill命令,这次带上一个信号选项:

$ kill -9 28305 

[1]+ Killed  psl &

如果用上述方法提交了一个后台进程,那么在退出时该进程将会被终止。为了使后台进

程能够在退出后继续运行,可以使用nohup命令,下面我们就介绍这一命令。

四 nohup命令

如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用

nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。

该命令的一般形式为:

nohup command &

1.1 使用nohup命令提交作业

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名

为nohup.out的文件中,除非另外指定了输出文件:

nohup command > myout.file 2>&1

在上面的例子中,输出被重定向到myout.file文件中。

让我们来看一个例子,验证一下在退出帐户后相应的作业是否能够继续运行。我们先提

交一个名为psl的日志清除进程:

$ nohup psl & 

[1]179

$ nohup:appending output to 'nohup.out'

现在退出该shell,再重新登录,然后执行下面的命令:

$ ps x |grep psl

179 ? S N 0:01 sh /root/psl

506 p2 s   0:00 grep psl

我们看到,该脚本还在运行。如果系统不支持ps x命令,使用ps -ef|grep ps1命令。

3.4.2 一次提交几个作业

如果希望一次提交几个命令,最好能够把它们写入到一个shell脚本文件中,并用nohup命

令来执行它。例如,下面的所有命令都用管道符号连接在一起;我们可以把这些命令存入一

个文件,并使该文件可执行。

cat /home/accounts/qtr_0499 | /apps/bin/trials.awk|sort|lp

$ cat > quarterend

cat /home/accounts/qtr_0499|/apps/bin/trials.awk|sort|lp

现在让它可执行:

$ chmod 744 quarterend

我们还将该脚本的所有输出都重定向到一个名为qtr.out的文件中。

$ nohup ./quarterend >qtr.out 2>&1 &

小结

本章中所讨论的工具主要是有关后台运行作业的。有时我们必须要对大文件进行大量更

改,或执行一些复杂的查找,这些工作最好能够在系统负荷较低时执行。

创建一个定时清理日志文件或完成其他特殊工作的脚本,这样只要提交一次,就可以每

天晚上运行,而且无需你干预,只要看看相应的脚本日志就可以了。Cron和其他工具可以使

系统管理任务变得更轻松。

http://blog.chinaunix.net/u/31435/showart_437204.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值