您的位置:首页 > 运维架构 > Linux

Linux让进程在后台运行

2016-01-21 10:36 295 查看
楼主这里有个程序需要花大量的时间执行,之前在自己的电脑上执行,有的半个小时出结果,有的可能不知道几天
出结果,但又不能让电脑一直开着,于是乎,机智如我便在网上租了一个云主机,约1元/天;下面便是细节:
我先租用云主机,安装了centos系统
默认纯净系统啥都没有,于是我yum install gcc,安装了gcc
把程序kong2.c文件放到远程主机上,然后编译执行
vim kong2.c    写好程序
gcc kong2.c -o kong5bu   生成可执行文件
jobs    此时无任务执行
./kong5bu    执行该程序




但是各位观众朋友们,当你执行一个很久的进程时,不能一直停在这个界面啥也不做啊,于是我们需要把他移到后台执行:




ctrl+z     移到后台并停止,注意[1]是该jobs的编号
bg %1      这个1是编号,表示让其对应的job后台执行
如图,./kong5bu由后台stopped变为running

但是亲爱的观众朋友们,这个时候虽然后台执行了,当你退出shell或者一不小心掉线时,该进程就一起挂掉了,
(楼主跑了一晚上的数据第二天不小心掉个线,算了,我想静静。。。)  所以,还要让它脱离组织自动保持运行




disown -h %1
这个时候看jobs它依然在running,只不过已经和独立了,然后输入
exit    退出shell或者关机,远程主机都不受影响
第二天起床,登录shell远程主机,使用命令
ps aux   查看进程,发现该job还在,我也放心了




让进程后台独立运行还有其他方法,如:
nohup ./kong5bu > xxx
该命令表示让程序后台独立运行,然后把输出结果保持在xxx文件中,运行完成后你直接在xxx中看结果即可,
要简单得多。由于楼主的程序要在开始的时候输入数据,所以就用的前面那种方法。

附上一个问题:使用 nohup ./startWeblogic.sh >log1.log &启动服务,报错:nohup: ignoring input and redirecting stderr to stdout求大神么你指点下怎么解决啊
这句你可以忽略,意思是把标准错误也输出到标准输出,也就是说为的字符输出,但是也会被重定向到log1.log
你可以在命令后面加 2>&1来屏蔽这个
nohup ./startWeblogic.sh >log1.log 2>&1 &
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: