在Linux后台执行命令,防止程序被挂起
2012年5月29日??? 星期二??? 阵雨
????
???? ?通常,我喜欢将java程序写好后放在Linux服务器上跑,这样可以解脱出自己的机器做其他事情。今天突然不小心将Linux客户端(xshell)关闭了。发现原来在linux服务器上跑的程序终止了,前功尽弃。
?????
????? 如果能实现这样一个功能该多好。将我的程序放在Linux下跑,我退出客户端时候不影响程序的运行。当我再一次登陆客户端的时候,依旧能找到原来再跑的程序。
?????
????? 经过尝试,方法如下:
????? 命令格式为: nohup command > log.file 2>&1 &
????? 解释:
???????????? 1、nohup使command命令不受shell退出的影响,忽略所有的挂起信号。
???????????? 2、command是我们要在linux下执行的命令或程序。
???????????? 3、>log.file将command命令输出的结果重定向到log.file文件中保存。
???????????? 4、2>&1表示将错误输出重定向到标准输出。由于标准输出已经重定向到了log.file文件,因此如果命?
????????????????? 令运行时发生错误,则错误提示也会被发送到log.file文件中。
?????????????5、最后的&代表此条命令是后台执行的。
?????
????? 当运行了nohup command > log,file 2>&1 &后,command命令就进入了后台运行。linux终端可以用来做其他事情。即便是退出终端,只要是不关闭linux服务器,command的命令就会一直执行到完成。
?????
- 如果想查看command命令的执行情况,可以做如下操作:1、如果当前终端没有关闭,输入命令jobs即可。2、如果终端已经关闭了,则重新打开终端,输入ps -ef | grep java (假设此处的command是一条java命令)。其中-e表示显示所有进程,-f表示以全格式显示。
- 如果想查看命令的标准输出情况,可以查看log.file文件。命令为tail -f log.file。其中参数-f表示即时输出文件变化后追加的数据。要退出,则直接按ctrl+c即可。
- 如果想终止后台运行的程序,使用jobs或者ps查看程序的pid。使用命令 kill %pid 杀掉指定的任务。
- 若命令已经在前台执行,要转为后台执行。则ctrl+z将任务挂起。然后bg %n使其后台继续执行。其中n为任务的pid。
- 如果将后台命令转为前台命令,使用fg %n。 n为任务的pid,使用jobs或者ps均可查到。
??????? 如有疑问,请联系我。15210807601@163.com。