参考 https://www.cnblogs.com/lwm-1988/archive/2011/08/20/2147299.html
预备
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
2 表示标准错误文件(stderr)。
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:
$ command > file 2>&1 &
或者
$ command >> file 2>&1 &
- jobs:查看当前有多少在后台运行的命令
- fg:将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
- bg:将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
后台运行
1.Ctrl+z : 后台暂停
对于已经在前台执行的命令,可以重新放到后台执行,首先按ctrl+z
暂停已经运行的进程,然后使用bg
命令将停止的作业放到后台运行,例如对正在前台执行的run.sh使用ctrl+z挂起它:
bg 1 # 后台执行,但是会有标准输出输出到终端
[1]+ sh rush.sh &
如果想把它调回到前台运行,可以用
fg 1
2. & :直接后台运行
当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&
命令把作业放到后台执行。实际上,这样是将命令放入到一个作业队列中了:
sh run.sh &
[1] 17208
在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:
command >out.file 2>&1 &
在上面的例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。 当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。
3. nohup 退出账户仍在后台运行
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。 该命令的一般形式为:
nohup conmmand &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
也可以使用追加的方式
nohup command >> myout.file 2>&1 &