linux程序放后台断掉,linux后台运行程序(secureCRT断掉或关闭后继续运行程序)...

版权声明:本文为博主原创文章,未经博主容许不得转载。python

secureCRT断掉后想继续运行程序。也就是程序会在后台一直执行到结束。linux

secureCRT经过ssh联接到client端运行程序,若是关掉窗口或者断开链接时,任务会被kill。

服务器

为了程序可以后台执行到结束:网络

1.能够用&:session

好比 Python test.py 改为 python test.py &app

来调用执行。ssh

2.另外,还有一种方式:经过ctrl+z、bg等一系列的命令,将已经在前台运行的做业放到后台执行:测试

若是一个做业已经在前台执行,能够经过ctrl+z将该做业放到后台并挂起。而后经过jobs命令查看在后台执行的做业并找到对应的做业ID,执行bg %n(n为经过jobs查到的做业ID)唤醒该做业继续执行。

该方式也存在结果会输出到终端上的状况,一样能够用重定向的方法解决

相关命令:

jobs------------查看在后台执行的进程

fg %n----------将后台执行进程n调到前台执行,n表示jobnumber(经过jobs查看的进程编号,而非pid)

ctrl+z----------将在前台执行的进程,放到后台并挂起

bg %n---------将在后台挂起的进程,继续执行

ctrl+c----------前台进程终止

kill %n---------杀掉后台运行的进程,n表示jobnumber(经过jobs查看的进程编号,而非pid)

this

但上面来两种方法只能解决disconnect时的问题。spa

若是关闭客户端,程序同样没法执行。当用户注销或者网络中断时,终端后收到SIGHUP信号,从而关闭其全部子进程。

这就要使用nohup执行

3.nohup命令:nohup + command

如 nohup python test.py

nohup就是不挂起的意思,nohup命令会忽略SIGHUP信号,从而终端退出时不会影响到后台做业。后台运行把终端输出存放在当前目录下的nohup.out文件中。客户端关机后从新登录服务器能够直接查看。

4.此外还有screen命令方式也能够实现,不介绍了。

程序运行后用

ps -ef  | grep '进行id'

或者ps -aux 来查看后来多少进行正在运行,grep本身的用户名,能够看到对应程序

原理以下:

在Linux/Unix中,有这样几个概念:

进程组(process group):一个或多个进程的集合,每个进程组有惟一一个进程组ID,即进程组长进程的ID。

会话期(session):一个或多个进程组的集合,有惟一一个会话期首进程(session leader)。会话期ID为首进程的ID。

会话期能够有一个单独的控制终端(controlling terminal)。与控制终端链接的会话期首进程叫作控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其他进程组称为后台进程组。

根据POSIX.1定义:

挂断信号(SIGHUP)默认的动做是终止程序。

当终端接口检测到网络链接断开,将挂断信号发送给控制进程(会话期首进程)。

若是会话期首进程终止,则该信号发送到该会话期前台进程组。

一个进程退出致使一个孤儿进程组中产生时,若是任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中全部进程。

所以当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会致使该会话期内其余进程退出。

test.py测试脚本:

[wizad@srv26 test]$ cat test.py

import time

dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}

for k in dict:

print "dict[%s]="%k,dict[k]

key="c"

if "c" not in dict:

print "it is not in %s" %key

print "-------------"

print dict.items()

print dict.keys()

print dict.values()

print "-------------"

iter = dict.iteritems()

for it in iter:

print "iteritems is:",it

print type(it)

print "-------------"

key_iter = dict.iterkeys()

for ki in key_iter:

print "key_iter is",ki

print type(ki)

print "-------------"

val_iter = dict.itervalues()

for vi in val_iter:

print "val_iter is",vi

print type(vi)

print "-------------"

print "Start: %s" % time.ctime()

time.sleep(20)

print "End: %s" % time.ctime()

f=open('result','w')

f.write('this is my test for breakup, and to find whether we can finish job')

time.sleep(20)

f.write('\nafter we break the dialog')

f.close

nohup python test.py执行后。关闭客户端,从新登陆后,能够查看nohup.out查看运行时屏幕输出。同时查看result看生成结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值