方法如下:
nohup command > myout.file 2>&1 &
(标准输出被重定向到文件file,然后错误输出也重定向到和标准输出一样,所以也错误输出到文件file。)
nohup命令可以让你的shell命令忽略SIGHUP信号,即可以使之脱离终端运行;“&”可以让你的命令在后台运行。
以脱离终端的方式在后台运行shell命令有这样几个好处:只要你执行过了命令,那么你的网络中断不会对你有任何影响,并且你就可以关闭终端软件了。
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。 对于2 ,表示标准错误,stderr。 2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了food。那么标准错误也会输出到food
为何2>&1要写在后面?
index.php task testOne >/dev/null 2>&1我们可以理解为,左边是标准输出,好,现在标准输出直接输入到 /dev/null 中,而2>&1是将标准错误重定向到标准输出,所以当程序产生错误的时候,相当于错误流向左边,而左边依旧是输入到/dev/null中。
可以理解为,如果写在中间,那会把隔断标准输出指定输出的文件
你可以用
ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1; ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中; ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了; ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。
前后台进程的切换与控制
(1)fg命令
功能:将后台中的命令调至前台继续运行
如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。
(2)Ctrl + z 命令
功能:将一个正在前台执行的命令放到后台,并且处于暂停状态
(3)bg命令
功能:将一个在后台暂停的命令,变成在后台继续执行
如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg %jobnum 将选中的命令调出继续执行。