michael0214的个人博客分享 http://blog.sciencenet.cn/u/michael0214

博文

Linux后台程序运行

已有 4892 次阅读 2014-8-24 09:26 |系统分类:科研笔记|关键词:学者| Linux后台程序运行

我们做生物信息数据处理的同学,经常要做的一个事情是要远程 (通常为ssh 或者tenelt) 登录Linux服务器运行程序,很多时候程序运行的时间还很长。这个时候万一我们需要关闭自己的电脑,或者关闭和与服务器进行通信的Terminal (或者信号突然中断)的话,之前运行的程序就前功尽弃了。怎么办呢? 好在强大的Linux系统给我们提供了几种方案可以很好的解决这个问题:


相关背景

hangup 名称的来由(来源网络

在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。所以,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。


解决方案:

1. nohup 命令: 该命令的原理是让提交的命令忽略 hangup 信号。使用方法即在提交命令之前添加nohup 即可。通常会在最后增加 & 符号以使程序在后台运行。在此情况下,标准输出和标准错误缺省会被重定向到 nohup.out 文件中,也可用 >filename 重定向输出文件名。

例如:

nohup perl Test.pl &


2.setsid 命令:与nohup 不同,setsid的原理是让进程运行在新的会话里从而成为不属于此终端的子进程。使用方法为提交命令之前添加setsid 即可.

3. &的使用(没怎么用过):例如:(perl Test.pl &)


4.disown(亡羊补牢的方案):前面几种方法使用的前提是在运行命令时提交nohup 或者setsid,但是程序已经提交运行时就无能为力了。disown命令刚好能够解决这个问题。

1)如果提交命令时已经用“&”将命令放入后台运行,则可以直接使用“disown”;

2)如果提交命令时未使用“&”将命令放入后台运行,可使用 CTRL-z 和“bg”将其放入后台,再使用“disown”


  • 用disown -h jobspec来使某个作业忽略HUP信号。

  • 用disown -ah 来使所有的作业都忽略HUP信号。

  • 用disown -rh 来使正在运行的作业忽略HUP信号。


5. Screen命令:
screen是建立一个新的全屏虚拟会话终端,这个会话只有在手动输入exit的时候才会退出,在这个会话里执行的命令不用担心HUP信号会对我们的进程造成影响,因此也不用给每个命令前都加上“nohup”或“setsid”了,非常适合我们有规划的执行大量的后台任务,可以非常方便的让我们对这些后台任务进行管理。

使用方法:
screen ##立即创建并进入一个会话(可重复此命令创建多个会话,screen 后加名称可对新建会话命名。多个会话见用ctrl +a进行切换)。
screen -ls ##列出所有会话。

ctrl +ad ##输入快捷键ctrl +a和d,可暂时退出当前会话。这个时候即使断开网络,关闭电脑也不必担心了。之后可以再度进入该回话 (screen -r name)

screen -r {name} ##进入指定会话。

exit ##进入指定会话后执行exit即可关闭该会话


总结

nohup/setsid 无疑是临时需要时最方便的方法,disown 能帮助我们来事后补救当前已经在运行了的作业,而 screen 则是在大批量操作时不二的选择了。



参考资料:

http://chenlx.blog.51cto.com/4096635/752423  

https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/  

http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html  



https://m.sciencenet.cn/blog-689440-821842.html

上一篇:常用Gene ID Conversion Tools
下一篇:重新选择文本编辑器

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-18 07:19

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部