linux 下通过fork实现后台运行进程
1 # 通常建议使用双fork方法。在每个fork处,父级退出,子级继续
2
3 #!/usr/bin/env python
4
5 import time,platform
6
7 import os
8 def funzioneDemo():
9
10 # 这是具体业务函数示例
11
12 fout = open('/tmp/demone.log', 'w')
13
14 while True:
15
16 fout.write(time.ctime()+'\n')
17
18 fout.flush()
19
20 time.sleep(2)
21
22 fout.close()
23 def createDaemon():
24
25 # fork进程 ,首先fork在setsid之前,确保进程不是进程组领导
26
27 try:
28
29 if os.fork() > 0: os._exit(0)
30
31 except OSError, error:
32
33 print 'fork #1 failed: %d (%s)' % (error.errno, error.strerror)
34
35 os._exit(1)
36
37 os.chdir('/')
38
39 os.setsid()
40
41 os.umask(0)
42 # 在setsid之后的第二个fork确保与控制终端的新关联不会仅仅通过打开终端设备来启动
43 try:
44
45 pid = os.fork()
46
47 if pid > 0:
48
49 print 'Daemon PID %d' % pid
50
51 os._exit(0)
52
53 except OSError, error:
54
55 print 'fork #2 failed: %d (%s)' % (error.errno, error.strerror)
56
57 os._exit(1)
58
59 # 重定向标准IO
60
61 sys.stdout.flush()
62
63 sys.stderr.flush()
64
65 si = file("/dev/null", 'r')
66
67 so = file("/dev/null", 'a+')
68
69 se = file("/dev/null", 'a+', 0)
70
71 os.dup2(si.fileno(), sys.stdin.fileno())
72
73 os.dup2(so.fileno(), sys.stdout.fileno())
74
75 os.dup2(se.fileno(), sys.stderr.fileno())
76 # 在子进程中执行代码
77
78 funzioneDemo() # function demo
79 if __name__ == '__main__':
80
81 if platform.system() == "Linux":
82
83 createDaemon()
84
85 else:
86
87 os._exit(0)
linux 下通过fork实现后台运行进程的更多相关文章
- Linux下 SpringBoot jar项目后台运行、查看、停用
运行java jar: nohup java -jar **-0.0.1-SNAPSHOT.jar & 查看进程: 采用top或者ps aux命令.一般 如果后台是springboot,jar ...
- linux下程序启动后后台运行实现
关于linux下的程序运行很简单,将源码编译成二进制(假设为proram)文件后直接在命令行运行即可,root#./program如果需要后台运行,即不占用当前终端,这在嵌入式linux显得十分有必要 ...
- 在linux下利用nohup来后台运行java程序
nohup java -jar /etc/deny/denyHttp_fat.jar & http://limaoyuan.iteye.com/blog/900928 http://zshou ...
- Linux下使用matlab在后台默默的运行.m文件(无界面形式)
Linux下使用matlab在后台默默的运行.m文件(无界面形式)本主在Ubuntu18.04LTS上已经安装了matlab直接运行Matlab$ matlab会启动 matlab,出现启动界面但想要 ...
- linux 命令行远程登录 后台运行命令的方法
linux 命令行远程登录 后台运行命令的方法 http://blog.csdn.net/isuker/article/details/55061595 Linux 技巧:让进程在后台可靠运行的几种方 ...
- Linux命令nohup实现命令后台运行并输出到或记录到日志文件
Linux命令nohup实现命令后台运行并输出到或记录到日志文件 导读 我们在调试程序的时候,免不了要去抓一些 log ,然后进行分析.如果 log 量不是很大的话,那很简单,只需简单的复制粘贴就好. ...
- Linux下librdkafka客户端的编译运行
Linux下librdkafka客户端的编译运行 librdkafka是一个开源的Kafka客户端C/C++实现,提供了Kafka生产者.消费者接口. 由于项目需要,我要将Kafka生产者接口封装起来 ...
- Linux 下在后台运行进程:nohup,setsid,& 以及 tmux
参考: Linux 技巧:让进程在后台可靠运行的几种方法 ssh 登录了远程服务器时,如果在前台运行耗时较长的任务, 当 ssh 掉线或关闭窗口时会导致命令停止运行. hup 与 nohup 当用户注 ...
- linux 后台运行进程 fg bg ctrl+z nohup
fg.bg.jobs.&.nohup.ctrl+z.ctrl+c 命令 一.& 加在一个命令的最后,可以把这个命令放到后台执行,如 watch -n 10 sh test.sh &am ...
随机推荐
- async-validator 源码学习笔记(五):Schema
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...
- var、let和const区别
var.let和const区别 变量提升问题 var声明的变量存在变量提升,而let与const声明的变量不存在变量提升,但存在暂时性死区 即在预编译阶段,js引擎扫描代码时,遇到变量声明,会把var ...
- Citus 分布式 PostgreSQL 集群 - SQL Reference(查询分布式表 SQL)
如前几节所述,Citus 是一个扩展,它扩展了最新的 PostgreSQL 以进行分布式执行.这意味着您可以在 Citus 协调器上使用标准 PostgreSQL SELECT 查询进行查询. Cit ...
- 数据库MySql的学习(1)--基本操作
转自 博客园-hoojo-http://www.cnblogs.com/hoojo/archive/2011/06/20/2085390.html 一.数据库简单介绍 1. 按照数据库的发展时间顺序, ...
- 为什么在重写 equals 方法的时候需要重写 hashCode 方法?
因为有强制的规范指定需要同时重写 hashcode 与 equal 是方法,许多容器类, 如 HashMap.HashSet 都依赖于 hashcode 与 equals 的规定.
- lombok的使用。
今天学习spring event,无意中看到lombok插件,以前也见同事用过,特此看了下用法.觉得还挺好用,记录下. 网上找到的一个比较术语化的解释:lombok是一个基于LGPL的开源J2EE综合 ...
- docker学习-01-安装docker
[root@localhost firstDocker]# cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) [root@loc ...
- 专家PID
前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法,基本已经覆盖了无模型和简单模型PID控制经典算法的大部.再接下来的我们将讨论智能PID控制,智能PID控制不同于常规意义下的智能控制,是 ...
- SCSS学习笔记(一)
SCSS的由来 SCSS就是加强版的CSS,要讲SCSS那就一定要从SASS讲起 SASS Sass(英文全称:Syntactically Awesome Stylesheets)是一个最初由Hamp ...
- 前端面试题整理——HTML/CSS
如何理解语义化: 对应的内容是用相应意思的标签,增加开发者和机器爬虫对代码的可读性. 块状元素和内联元素: 块状元素有:display:block/table:有div h1 h2 table ul ...