日期:2014-05-16  浏览次数:20545 次

在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。