仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1022|回复: 11
打印 上一主题 下一主题

[其他Linux] linux教程之让历程在背景牢靠运转的几种办法

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:29:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习python,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。
想让历程在断开毗连后仍然坚持运转?假如该历程已入手下手运转了该怎样弥补?假如有大批这类需求怎样简化操纵?
我们常常会碰着如许的成绩,用telnet/ssh登录了远程的Linux服务器,运转了一些耗时较长的义务,了局却因为收集的不不乱招致义务半途失利。怎样让命令提交后不受当地封闭终端窗口/收集断开毗连的搅扰呢?上面举了一些例子,您能够针对分歧的场景选择分歧的体例来处置这个成绩。
nohup/setsid/&
场景:
假如只是一时有一个命令必要长工夫运转,甚么办法能最烦琐的包管它在背景不乱运转呢?
办理办法:
我们晓得,当用户刊出(logout)大概收集断开时,终端会收到HUP(hangup)旌旗灯号从而封闭其一切子历程。因而,我们的办理举措就有两种路子:要末让历程疏忽HUP旌旗灯号,要末让历程运转在新的会话里从而成为不属于此终真个子历程。
1.nohup
nohup无疑是我们起首想到的举措。望文生义,nohup的用处就是让提交的命令疏忽hangup(在Unix的初期版本中,每一个终端城市经由过程modem和体系通信。当用户logout时,modem就会挂断(hangup)德律风。同理,当modem断开毗连时,就会给终端发送hangup旌旗灯号来关照其封闭一切子历程。)旌旗灯号。让我们先来看一下nohup的匡助信息
NOHUP(1)UserCommandsNOHUP(1)
NAME
nohup-runacommandimmunetohangups,withoutputtoanon-tty
SYNOPSIS
nohupCOMMAND[ARG]...
nohupOPTION
DESCRIPTION
RunCOMMAND,ignoringhangupsignals.
--helpdisplaythishelpandexit
--version
outputversioninformationandexit

可见,nohup的利用是非常便利的,只需在要处置的命令前加上nohup便可,尺度输入和尺度毛病缺省会被重定向到nohup.out文件中。一样平常我们可在开头加上"&"来将命令同时放进背景运转,也可用">filename2>&1"来变动缺省的重定向文件名。
nohup示例
[root@pvcent107~]#nohuppingwww.ckuyun.com&
[1]3059
nohup:appendingoutputto`nohup.out
[root@pvcent107~]#ps-ef|grep3059
root3059984021:06pts/300:00:00pingwww.ckuyun.com
root3067984021:06pts/300:00:00grep3059
[root@pvcent107~]#

2。setsid
nohup无疑能经由过程疏忽HUP旌旗灯号来使我们的历程制止半途被中止,但假如我们换个角度思索,假如我们的历程不属于承受HUP旌旗灯号的终真个子历程,那末天然也就不会遭到HUP旌旗灯号的影响了。setsid就可以匡助我们做到这一点。让我们先来看一下setsid的匡助信息:

SETSID(8)LinuxProgrammer’sManualSETSID(8)NAMEsetsid-runaprograminanewsessionSYNOPSISsetsidprogram[arg...]DESCRIPTIONsetsidrunsaprograminanewsession.

可见setsid的利用也长短常便利的,也只需在要处置的命令前加上setsid便可。
setsid示例
[root@pvcent107~]#setsidpingwww.ckuyun.com
[root@pvcent107~]#ps-ef|grepwww.ckuyun.com
root310941007:28?00:00:00pingwww.ckuyun.com
root3110229217007:29pts/400:00:00grepwww.ckuyun.com
[root@pvcent107~]#

值得注重的是,上例中我们的历程ID(PID)为31094,而它的父ID(PPID)为1(即为init历程ID),并非以后终真个历程ID。请将此例与nohup例中的父ID做对照。
3。&
这里另有一个关于subshell的小技能。我们晓得,将一个或多个定名包括在“()”中就可以让这些命令在子shell中运转中,从而扩大出良多风趣的功效,我们如今要会商的就是个中之一。
当我们将"&"也放进“()”内以后,我们就会发明所提交的功课其实不在功课列表中,也就是说,是没法经由过程jobs来检察的。让我们来看看为何如许就可以躲过HUP旌旗灯号的影响吧。
subshell示例
[root@pvcent107~]#(pingwww.ckuyun.com&)
[root@pvcent107~]#ps-ef|grepwww.ckuyun.com
root162701014:13pts/400:00:00pingwww.ckuyun.com
root1627815362014:13pts/400:00:00grepwww.ckuyun.com
[root@pvcent107~]#

从上例中能够看出,新提交的历程的父ID(PPID)为1(init历程的PID),并非以后终真个历程ID。因而其实不属于以后终真个子历程,从而也就不会遭到以后终真个HUP旌旗灯号的影响了
screen
场景:
我们已晓得了怎样让历程免受HUP旌旗灯号的影响,可是假如有大批这类命令必要在不乱的背景里运转,怎样制止对每条命令都做如许的操纵呢?
办理办法:
此时最便利的办法就是screen了。复杂的说,screen供应了ANSI/VT100的终端摹拟器,使它可以在一个实在终端下运转多个全屏的伪终端。screen的参数良多,具有很壮大的功效,我们在此仅先容其经常使用功效和扼要剖析一下为何利用screen可以制止HUP旌旗灯号的影响。我们先看一下screen的匡助信息:
SCREEN(1)SCREEN(1)
NAME
screen-screenmanagerwithVT100/ANSIterminalemulation
SYNOPSIS
screen[-options][cmd[args]]
screen-r[[pid.]tty[.host]]
screen-rsessionowner/[[pid.]tty[.host]]
DESCRIPTION
Screenisafull-screenwindowmanagerthatmultiplexesaphysical
terminalbetweenseveralprocesses(typicallyinteractiveshells).
EachvirtualterminalprovidesthefunctionsofaDECVT100terminal
and,inaddition,severalcontrolfunctionsfromtheISO6429(ECMA
48,ANSIX3.64)andISO2022standards(e.g.insert/deletelineand
supportformultiplecharactersets).Thereisascrollbackhistory
bufferforeachvirtualterminalandacopy-and-pastemechanismthat
allowsmovingtextregionsbetweenwindows.

利用screen很便利,有以下几个经常使用选项:
用screen-dmSsessionname来创建一个处于断开形式下的会话(并指定其会话名)。
用screen-list来列出一切会话。
用screen-rsessionname来从头毗连指定会话。
用快速键CTRL-ad来临时断开以后会话。
screen示例
[root@pvcent107~]#screen-dmSUrumchi
[root@pvcent107~]#screen-list
Thereisascreenon:
12842.Urumchi(Detached)
1Socketin/tmp/screens/S-root.
[root@pvcent107~]#screen-rUrumchi

当我们用“-r”毗连到screen会话后,我们就能够在这个伪终端内里随心所欲,不再用忧虑HUP旌旗灯号会对我们的历程形成影响,也不必给每一个命令前都加上“nohup”大概“setsid”了。这是为何呢?让我来看一下上面两个例子吧。
1.未利用screen时新历程的历程树
[root@pvcent107~]#pingwww.google.com&
[1]9499
[root@pvcent107~]#pstree-H9499
init─┬─Xvnc
├─acpid
├─atd
├─2*[sendmail]
├─sshd─┬─sshd───bash───pstree
│└─sshd───bash───ping


我们能够看出,未利用screen时我们所处的bash是sshd的子历程,当ssh断开毗连时,HUP旌旗灯号天然会影响到它上面的一切子历程(包含我们新创建的ping历程)。
2.利用了screen后新历程的历程树
[root@pvcent107~]#screen-rUrumchi
[root@pvcent107~]#pingwww.ckuyun.com&
[1]9488
[root@pvcent107~]#pstree-H9488
init─┬─Xvnc
├─acpid
├─atd
├─screen───bash───ping
├─2*[sendmail]

而利用了screen后就分歧了,此时bash是screen的子历程,而screen是init(PID为1)的子历程。那末当ssh断开毗连时,HUP旌旗灯号天然不会影响到screen上面的子历程了。
总结
如今几种办法已先容终了,我们能够依据分歧的场景来选择分歧的计划。nohup/setsid无疑是一时必要时最便利的办法,disown能匡助我们来过后弥补以后已在运转了的功课,而screen则是在多量量操纵时不贰的选择了

</p>
使用gcc或g++进行编译,使用gdb进行调试;
沙发
发表于 2015-1-17 05:54:10 | 只看该作者
尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助.
透明 该用户已被删除
板凳
发表于 2015-1-20 14:37:51 | 只看该作者
主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
再现理想 该用户已被删除
地板
发表于 2015-1-29 09:16:12 | 只看该作者
如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。
简单生活 该用户已被删除
5#
发表于 2015-2-6 00:15:13 | 只看该作者
任何一个叫做操作系统的东西都是这样子构成的:内核+用户界面+一般应用程序。
不帅 该用户已被删除
6#
发表于 2015-2-14 13:34:44 | 只看该作者
虽然大家都比较喜欢漂亮的mm,但是在学 linux 的过程中,还是要多和“男人”接触一下:P 遇到问题的时候,出来看说和上网查之外,就是要多用 linux 下的 man 命令找找帮助。
谁可相欹 该用户已被删除
7#
发表于 2015-3-4 06:47:01 | 只看该作者
了解Linux的网络安全,系统的安全,用户的安全等。安全对于每位用户,管理员来说是非常重要的。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-11 17:51:29 | 只看该作者
主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。
兰色精灵 该用户已被删除
9#
发表于 2015-3-19 04:50:59 | 只看该作者
期间我阅读了不少关于Linux的相关资料,其中也不乏一些有趣的小故事,这既丰富了我的课余生活,也让我加深了对一些术语的理解,比玩游戏强多了。?
若相依 该用户已被删除
10#
发表于 2015-3-27 08:09:32 | 只看该作者
熟悉系统的基本操作,Linux的图形界面直观,操作简便,多加上机练习就可熟悉操作,在Linux下学习办公软件等常用软件。
只想知道 该用户已被删除
11#
发表于 2015-3-27 08:09:32 | 只看该作者
掌握硬件配置,如显卡,声卡,网卡等,硬件只要不是太老或太新一般都能被支持,作为一名Linux系统管理员建议多阅读有关硬件配置文章,对各种不支持或支持不太好的硬件有深刻的了解。
若相依 该用户已被删除
12#
发表于 2015-3-27 08:09:33 | 只看该作者
硬盘安装及光盘安装,清楚了解安装Linux应注意的有关问题,如安装Linux应在最后一个分区内,至少分二个分区。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-6 11:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表