linux运行命令后台的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux运行命令后台的区别相关的知识,希望对你有一定的参考价值。

linux shell中经常会使用后台运行某个脚本

那么,下面的几种区别在哪呢

commandcommand > /dev/nullcommand > /dev/null 2>&1command &command &> /dev/nullnohup command &> /dev/null

下面分别简单地谈一下

# 以test.sh为例[[email protected] ~]# cat test.sh #!/bin/bash#while [  ‘1’ == ‘1’ ] ;do
	echo `date "+%Y-%m-%d %H:%M:%S"` 
	sleep 100done
command

直接执行,命令输出会显示在终端界面上,ctrl-C会终止命令的运行

[[email protected] ~]# bash test.sh 2016-08-07 20:49:47^C
[[email protected] ~]#
command > /dev/null

直接执行,命令标准输出会定向到null设备,即忽略标准输出1,但错误输出2会显示, 其实这等同于command 1 > /dev/null

[[email protected] ~]# cat test.sh#!/bin/bash#while [  ‘1’ == ‘1’ ] ;do
	echo `date "+%Y-%m-%d %H:%M:%S"` 
	ll
	sleep 100done[[email protected] ~]# bash test.sh > /dev/nulltest.sh: line 5: ll: command not found
^C
command > /dev/null 2>&1

这里首先和上面命令一样会把1输出到null设备,2重定向到1,那么2也会导null设备, 所以所有输出均送到了null设备

command &

这个想必大家都用过,后台执行,然而当我们退出终端后,command就会终止 这是因为我们的终端相当于一个父进程 ,一旦父进程退出,就会给其所有子进程发送hangup信号,子进程收到就会退出。 这里我不再举例子 如果我们在头加上nohup,也就是使用nohup command &,那么父进程就不会发送hangup给这个子进程,从而会一直在后台运行

command &> /dev/null 和 command > /dev/null 2>&1区别

网上并没有说多大区别,这是谈到ksh对于后者兼容更好,也就是满足了需求,所以推荐后者,当然如果确定当前平台,使用前者似乎更方便少,打了4个字符

后台控制
# 后台的命令可以通过jobs查看[[email protected] ~]# jobs[1]-  Running                 bash test.sh &
[2]+  Running                 bash test1.sh &# 调到前后台可以通过bg %JOB_NUMBER fg %JOB_NUMBER来完成,比如把job 1调到前台[[email protected] ~]# fg %1bash test.sh# 命令行就会一直持续这样,ctrl-Z可以让其停止运行在后台[[email protected] ~]# fg %1bash test.sh
^Z
[1]+  Stopped                 bash test.sh# 如何让其后台运行,因为现在状态为stopped,bg %1,你会发现bg 1也行[[email protected] ~]# bg 1[1]+ bash test.sh &
[[email protected] ~]# jobs[1]-  Running                 bash test.sh &
[2]+  Running                 bash test1.sh &


本文出自 “启学的学习之路” 博客,请务必保留此出处http://qixue.blog.51cto.com/7213178/1906781

以上是关于linux运行命令后台的区别的主要内容,如果未能解决你的问题,请参考以下文章

linux中,命令后加&与不加&的本质区别是啥? 我知道加&表示是后台运行?

linux命令后台运行

linux中nohup 与 & 的区别

查看后台运行的命令 、进程状态、关闭前后台命令

Linux shell中运行命令后加上字符“&”的作用

linux 为啥不能后台运行