简单而有用的nohup命令

 技术学习  没有评论 »
072005
 

在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止。

要实现守护进程,一种方法是按守护进程的规则去编程(本站有文章介绍过),比较麻烦;另一种方法是仍然用普通方法编程,然后用nohup命令启动程序:

nohup <程序名> &

则控制台logout后,进程仍然继续运行,起到守护进程的作用(虽然它不是严格意义上的守护进程)。

使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用,实现了完整的守护进程功能。

FreeBSD可以同时运行多个进程,在shell下直接输入命令后,shell将进程放到前台执行。如果要将进程放到后台执行,需要在命令行的结尾加上一个 & 符号。下面的命令从后台执行,从ftp.isc.org下载文件。

$ fetch  ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz  &

当程序已经在前台执行的时候,可以使用^Z将这个程序挂起,暂停执行。然后可以使用bg命令将这个挂起的程序放到后台执行,或者使用fg将某个在后台或挂起的进程放到前台执行。

当在后台运行了程序的时候,可以用jobs命令来查看后台作业的状态。在有多个后台程序时,要使用来参数的fg命令将不同序号的后台作业切换到前台上运行。

$ jobs

[1]+  Running                 fetch ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz &

$ fg %1

fetch ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz

在启动了多个程序之后,可以使用ps命令来查看这些进程及其状态。

$ ps

  PID  TT  STAT      TIME COMMAND

  501  p2  Ss     0:00.24 -bash (bash)

  988  p2  R+     0:00.00 ps

  765  p3  Is+    0:00.28 -bash (bash)

  230  v0  Is+    0:00.14 -bash (bash)

显示的结果包括进程的标识号PID,控制终端TT(p0表示控制终端为ttyp0),进程的状态STAT,进程使用的处理器时间TIME和具体的命令。

可以给ps命令加上参数,来获得更多的输出内容,以下命令将输出系统中所有的进程:

$ ps waux

USER     PID %CPU %MEM   VSZ  RSS  TT  STAT STARTED      TIME COMMAND

wb       989  0.0  0.4   400  236  p2  R+    5:48PM   0:00.00 ps -aux

root       1  0.0  0.1   496   72  ??  Is   10:12PM   0:00.02 /sbin/init -

root       2  0.0  0.0     0    0  ??  DL   10:12PM   0:07.05  (pagedaemon)

root       3  0.0  0.0     0    0  ??  DL   10:12PM   0:00.20  (vmdaemon)

root       4  0.0  0.0     0    0  ??  DL   10:12PM   0:04.27  (syncer)

root      27  0.0  0.0   204    0  ??  IWs  -         0:00.00 (adjkerntz)

root      91  0.0  0.5   820  328  ??  Is    2:12PM   0:00.82 syslogd

daemon   100  0.0  0.0   792    0  ??  IWs  -         0:00.00 (portmap)

root     131  0.0  0.3   864  164  ??  Is    2:12PM   0:00.06 inetd

root     134  0.0  0.3   980  192  ??  Is    2:12PM   0:00.11 cron

root     138  0.0  0.6  1252  380  ??  Is    2:12PM   0:00.11 sendmail: accepti

wb       230  0.0  1.1  1540  668  v0  Is+   2:12PM   0:00.14 -bash (bash)

root     231  0.0  0.0   824    0  v1  IWs+ -         0:00.00 (getty)

root     232  0.0  0.0   824    0  v2  IWs+ -         0:00.00 (getty)

root     500  0.0  0.9   876  524  ??  Ss    4:19PM   0:01.78 telnetd

wb       501  0.0  1.4  1540  888  p2  Ss    4:19PM   0:00.24 -bash (bash)

root     698  0.0  1.5  1644  900  ??  Is    4:49PM   0:00.02 /usr/local/sbin/s

root     700  0.0  1.2  1308  748  ??  Ss    4:49PM   0:00.22 /usr/local/sbin/n

root     702  0.0  3.4  2900 2112  ??  S     4:49PM   0:00.32 /usr/local/sbin/s

root     764  0.0  0.9   880  540  ??  Is    5:10PM   0:00.22 telnetd

wb       765  0.0  1.7  1536 1052  p3  Is+   5:10PM   0:00.28 -bash (bash)

root       0  0.0  0.0     0    0  ??  DLs  10:12PM   0:00.02  (swapper)

当用户启动一个进程的时候,这个进程是运行在前台,使用与相应控制终端相联系的标准输入、输出进行输入和输出。即使将进程的输入输出重定向,并将进程放在后台执行,进程仍然和当前终端设备有关系。正因为如此,在当前的登录会话结束时,控制终端设备将和登录进程相脱离,那么系统就向所有与这个终端相联系的进程发送SIGHUP的信号,通知进程线路已经挂起了,如果程序没有接管这个信号的处理,那么缺省的反应是进程结束。因此普通的程序并不能真正脱离登录会话而运行进程,为了使得在系统登录后还可以正常执行,只有使用命令nohup来启动相应程序。

从上面的ps的输出结果可以看出,有些程序没有控制终端,这些程序通常是一些后台进程。使用命令nohup当然可以启动这样的程序,但nohup启动的程序在进程执行完毕就退出,而常见的一些服务进程通常永久的运行在后台,不向屏幕输出结果。在Unix中这些永久的后台进程称为守护进程(daemon)。守护进程通常从系统启动时自动开始执行,系统关闭时才停止。如果偶然某个守护进程消失了,那么它提供的服务将不再能被使用。

在守护进程中,最重要的一个是超级守护进程inetd,这个进程接管了大部分网络服务,但并不是对每个服务都自己进行处理,而是依据连接请求,启动不同的服务程序与客户机打交道。inetd支持网络服务种类在它的设置文件/etc/inet.conf中定义。inet.conf文件中的每一行就对应一个端口地址,当inetd接受到连接这个端口的连接请求时,就启动相应的进程进行处理。使用inetd的好处是系统不必启动很多守护进程,从而节约了系统资源,然而使用inetd启动守护进程相应反应会迟缓一些,不适合用于被密集访问的服务进程。

辞旧迎新-生活与梦想的延伸

 心情随笔  没有评论 »
012005
 

辞旧迎新-生活与梦想的延伸

一场大雪,带来了江南难得的寒冷,那根04年点燃,05年掐灭的烟,静静的躺在了刚才吃三明治顺带的咖啡杯里,杯底残留的咖啡将本应红色的烟头润湿成闪亮的黑。

“2005年去看海!”,95年说的这句话是如此的不经意,现在却真实的在脑海里回荡。十年,就这样如梭的过去了,从懵懂的岁月,到如今的时光,一切都显得那么仓促,童年的回忆还在心里默默怀念的时候,面对的却是新的一年的憧憬与展望。

或许这就是作为一个IT人所特有的逻辑思维,少了一点感性,多了一份理性。

谈人生过早,用生活来形容显得更恰当一点。当生活里经历了甜酸苦辣之后,我想我真的是长大了,幼稚的外表已经无法掩盖真实存在的心理,可是依旧无法完全接受成熟这两个字所蕴涵的苍老。

毕业那天,把朋友一个个送走之后,悄悄的踏上了回家的路途,没有让任何人送。曾经因为感觉大学校园的近在咫尺,而显得那么不屑,当后悔没有跟相处四年的同学挥泪告别的同时,我已经深刻的意识到,有些人,这一辈子再也见不到了。那次在Starbucks喝咖啡的时候,Simon偶遇他在美国念MBA的大陆校友流露出来的惊喜,让我再次的抱有一丝幻想,或许等我未来带着小孩子在街头散步的时候,对面走来的那对夫妇就是我大学里某对恋人。当一个平面内两个“偶然”由于某种原因,非平行出现的时候,必然会有一个交叉点,而这个交叉点,我姑且叫它“必然”。只是每次坐公司的车,经过苏大的时候,看到宿舍区的灯火跟校园门口进出的人群,那种感觉已经无法用文字来形容。

一件T恤,一件外套,犹如平安夜一样,独自一人徘徊在观前街的时候,寒冷的感觉从外套直钻内心,理应不孤独的我却依旧选择了孤独。在我看来,孤独跟自由的分别仅仅是因为那一刻的感受不同而已。逛遍杭州南山路上的PUB之后,我已经对苏州十全街上的酒吧没有了那种好感,只是宿舍那瓶99年的红酒依旧让我怀念,没有威士忌的香醇却有着干红特有的酸甜。

妈妈在电话里始终把我当个孩子似的嘘寒问暖,要我注意身体,却不去留意自己长满冻疮的手和开始黑白相间的头发。不在家的日子,可以每年都记得在我生日的那天给我打电话,却不清楚自己那么多年来,自己每年的生日究竟干了些什么。

曾几何时开始尝试用文字来表达自己的内心世界,只是限于理科生的文笔之差劲而成为流水帐,当BLOG在网络上流传开来的时候,收发Mail,看News,逛BBS与品BLOG已经成了我每天必做之事,如果那次在西湖岸边的澄庐咖啡里喝着纯正的Brazilsantos的时候,身边有一台Notebook的话,我想那时候的感受应该比在Face to Face喝Jack Daniel's更来的惬意,只是酝酿在脑海里的想法在回到苏州的时候已经所剩无几。

04年,经历了感情的潮起潮落,经历了校园到社会的转变,经历了生与死的体验,经历了太多的转折与变迁,感触于Johnny前些天跟我说的那句话:“每经历一件事情,你就可以学到一样东西”,俱往矣~~~

打开窗户,让弥散在空调下的烟扩散出去,带着烟走上阳台,寒意让思绪暂时凝固,将烟头使劲地抛了出去,在漆黑的夜空划出一道闪亮的弧线,让往事随风,风吹不走的,便将之埋藏在心底。。。05年的第一个凌晨,距离地平线的曙光出现还早,可是我却可以看到我的幸福,已经不再那么迷茫,一切如愿,这就是我的阿Q精神。

心里总向往有浪漫的日出
却从不奢望有美好的结束

就象落叶
怀着梦想
告别大树

却不知
最终会
飘落何处

Powered by WordPress 3.3.1 CopyRight 2004~2012, Sonic Tang

虚拟主机赞助商:海波,苏ICP备11082989号

Suffusion theme by Sayontan Sinha