linux后台运行程序(secureCRT断掉或关闭后继续运行程序)
secureCRT断掉后想继续运行程序。也就是程序会在后台一直执行到结束。
secureCRT通过ssh联接到client端运行程序,如果关掉窗口或者断开连接时,任务会被kill。
为了程序能够后台执行到结束:
1.可以用&:
比如 python test.py 改成 python test.py &
来调用执行。
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)
但上面来两种方法只能解决disconnect时的问题。
如果关闭客户端,程序一样无法执行。当用户注销或者网络中断时,终端后收到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看生成结果。
linux后台运行程序(secureCRT断掉或关闭后继续运行程序)的更多相关文章
- CentOS 不间断会话(ssh关闭后如何保证程序继续运行)(nohup和screen)
当使用ssh与远程主机的会话被关闭时,在远程主机上运行的命令也随之被中断. 就是ssh 打开以后,bash等都是他的子程序,一旦ssh关闭,系统将所有相关进程杀掉!! 导致一旦ssh关闭,执行中的任务 ...
- win7程序关闭后弹出 程序兼容性助手 这个程序可能安装不正确 如果此程序没有正确安装,处理方式
用WTL编写的程序,编译成release后,在win7上关闭后,弹出这个对话框 处理方法: 将这个xml文件命名成 xxx.exe.manifest,保存到指定目录下 <?xml version ...
- 让java程序在后台一直执行(例如putty关闭后后台程序继续运行)
如果在终端中执行java -jar xxx.jar&命令,当终端关闭时,xxx.jar也会同时结束运行,但是如果执行nohup java -jar xxx.jar&命令,则程序会在后台 ...
- 程序启动读取和关闭时保存应用程序设置(QSettings)
保存应用程序设置(QSettings)1. QSettings 类 QSettings 提供保存应用程序当前设置的接口,可以方便地保存程序的状态,例如窗口大小和位置,选项的选中状态等等.在 Windo ...
- winfom实现关闭后一直运行
using PLog; using System; using System.Collections.Generic; using System.Diagnostics; using System.L ...
- Android--保持加速度传感器在屏幕关闭后运行
由于写论文需要,需要用手机加速度采集数据,关于android加速度传感器的介绍网上一抓一大把,但大多都是大同小异,跟官网文档差不多.自己写了个取加速度传感器的APK,发现数据有点不对劲,原理屏幕一关后 ...
- Ubuntu上用快捷键关闭没有响应的程序
Linux 上有很多方法可以强制关闭无响应的程序,比如你可以通过按快捷键 Ctrl + Shift + T 来调出 Terminal 或者用 Ctrl + Shift + F1 进入 Console ...
- Android--保持加速度传感器在屏幕关闭后运行(收集)
由于写论文需要,需要用手机加速度采集数据,关于android加速度传感器的介绍网上一抓一大把,但大多都是大同小异,跟官网文档差不多.自己写了个取加速度传感器的APK,发现数据有点不对劲,原理屏幕一关后 ...
- 如何让Web程序在点击按钮后出现如执行批处理程序般的效果
在cli程序中,输入命令得到连续的输出已经是一种进度而美观的页面交互形式,好比下图: 而web程序里也有类似的场景,比如执行一个耗时任务,除了显示出等待图标外,用户还希望把执行的状态及时显示出来.如下 ...
随机推荐
- windows的常用快捷键(实用篇)
整理一下windows的常用快捷键,有些快捷键老不用都忘记了,这里整理一下方便自己以后忘记时翻阅. 一.Fn键的使用 1.F1帮助 2.F2重命名 3.F3打开搜索 4.F4打开地址栏常用地址 5.F ...
- 数组的遍历你都会用了,那Promise版本的呢
这里指的遍历方法包括:map.reduce.reduceRight.forEach.filter.some.every因为最近要进行了一些数据汇总,node版本已经是8.11.1了,所以直接写了个as ...
- rabbitMQ权限相关命令
权限相关命令为: (1) 设置用户权限 rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP (2) 查看(指 ...
- 3.5 find() 判断是否存在某元素
vector 判断是否存在某元素: if(find(A.begin(), A.end(), A[i]) != A.end()){ // 若存在 A[i] // find() 返回一个指针 }
- PAT-013 L1-013. 计算阶乘和
L1-013. 计算阶乘和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 对于给定的正整数N,需要你计算 S = 1! + 2 ...
- Zookeeper和Chubby【分布式协调系统】
前言(对于协调系统来说其客户端往往是分布式集群) 大规模分布式系统需要解决各种类型的协调需求: 当集群中有新的进程或服务器加入时,如何探测到它的加入?如何能够自动获取配置参数? 当配置信息被某个进程或 ...
- ubuntu 下查看caj文件
知网的学位论文只有CAJ版,而我又偏偏使用Ubuntu,所以就有了这篇文章. 前端时间发现第一种方法在ubuntu 16 上不行, 请使用第二种方法. 第一种方法: 环境:Ubuntu 14.04 6 ...
- C++笔记010:C++对C的扩展——register关键字增强
register关键字:请求编译器让变量直接放到CPU内部寄存器里面,而不是通过内存寻址访问,速度快. 在C语言中,register修饰的变量不能取地址,去寄存器变量的地址在C语言里面是会出错的. i ...
- 浅谈JS变量声明和函数声明提升
先来两个问题 很多时候,在直觉上,我们都会认为JS代码在执行时都是自上而下一行一行执行的,但是实际上,有一种情况会导致这个假设是错误的. a = 2; var a; console.log(a); 按 ...
- C/C++静态数组与动态数组的区别
简介 以下三行代码有什么区别? int a[10]; int *a = (int*)malloc(sizeof(int)*10); int *a = new int[10]; 第一行代码定义a为包含1 ...