Linux中让进程在后台运行的方法


作者:NinGoo | 【转载须以超链接形式标明文章原始出处和作者信息】

在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:

$ ./test.sh &
[1] 17208

$ jobs -l
[1]+ 17208 Running ./test.sh &

对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行:

$ ./test.sh
[1]+ Stopped ./test.sh

$ bg %1
[1]+ ./test.sh &

$ jobs -l
[1]+ 22794 Running ./test.sh &

但是如上方到后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1)

$ echo $$
21734

$ nohup ./test.sh &
[1] 29016

$ ps -ef | grep test
515 29710 21734 0 11:47 pts/12 00:00:00 /bin/sh ./test.sh
515 29713 21734 0 11:47 pts/12 00:00:00 grep test

$ setsid ./test.sh &
[1] 409

$ ps -ef | grep test
515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh
515 413 21734 0 11:49 pts/12 00:00:00 grep test

上面的试验演示了使用nohup/setsid加上&使进程在后台运行,同时不受当前shell退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可以使用disown命令:

$ ./test.sh &
[1] 2539

$ jobs -l
[1]+ 2539 Running ./test.sh &

$ disown -h %1

$ ps -ef | grep test
515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh
515 2542 21734 0 11:52 pts/12 00:00:00 grep test

另外还有一种方法,即使将进程在一个subshell中执行,其实这和setsid异曲同工。方法很简单,将命令用括号() 括起来即可:

$ (./test.sh &)

$ ps -ef | grep test
515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh
515 12483 21734 0 11:59 pts/12 00:00:00 grep test

注:本文试验环境为Red Hat Enterprise Linux AS release 4 (Nahant Update 5),shell为/bin/bash,不同的OS和shell可能命令有些不一样。例如AIX的ksh,没有disown,但是可以使用nohup -p PID来获得disown同样的效果。

还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便:

$ screen -dmS screen_test

$ screen -list
There is a screen on:
27963.screen_test (Detached)
1 Socket in /tmp/uscreens/S-jiangfeng.

$ screen -r screen_test



相关阅读:
Ubuntu新版特性大盘点
winxp 的常用操作及技巧
Oracle中Sequence的使用
HTML表格标记教程(41):表头的宽度和高度属性WIDTH、HEIGHT
Apache 配置详解(最好的APACHE配置教程)
IE和FireFox JavaScript的函数名的作用域的异同
php新建文件自动编号的思路与实现
js预载入和JavaScript Image()对象使用介绍
如何在UNIX下实现Oracle数据库自动备份
Vista系统停止响应解决办法
Linux系统下分发SCP不需要输入密码配置
风河应用Oracle产品为企业2.0提供动力
javascript写的日历类(基于pj)
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 破茧而出 市场销售业务员工作计划 最新优秀员工辞职报告 2012,温暖的成长 在公共汽车上作文600字 写人作文写法详解—写自己的参考题目 描写心情的句子 祖国在我心中作文600字 区安监局2016年精神文明创建工作总结 《纳兰容若词传》读后感 永远的布谷鸟读后感300字 关于初夏的诗句 大学生团员的入党申请书 小鸡观察日记600字 你已经在正确的道路上 人民广场在哭泣400字 聪明机灵的猴大臣 岁月如歌 人生如潮 写景篇四年级优秀作文 家访手记:孩子就是全世界 小学英语学科周活动代表发言稿 2014年的小学清明节作文 丢不掉 2016年中心卫生院院长述职述廉报告 梦一场梦,一个故事在跳动 分裂 高中高一作文1000字:跟时代一起改变IV 如果我住在江南 “三下乡”先进事迹 试谈《南州六月荔枝丹》的教学设计 经典爱情短信:恋人情人爱情絮语 永远坐在前排读后感 党员干部廉洁从政心得体会 副局长自查剖析 信访局上半年信访工作总结 随行的思念 学习推进三项重点工作讲话精神 我爱唠叨的妈妈读后感100字 掌握小学生作文开头的方法和技巧 《我眼中的泉州》 【原创】可惜,不是你陪我到最后 夜寂静 初中初三作文450字:幸福的定义 外婆的关心作文600字 初中初三作文350字:《夏天随笔》——暑期快乐写作(3) 医院住院医生规章制度 品悟人生 咫尺天涯,擦肩而过作文150字 缓慢的力量 繁华凋落,我们是否会伤

Copyright © 2016 phpStudy |