首页 » 信息技术 »

setsid命令的测试

2019年2月11日 / 220次阅读
Linux

都说setsid命令可以让程序在后台执行,并且logout之后,程序依然执行,是创建daemon程序的利器。于是我做了一点小测试,证明了这个说法,但是还是踩了坑。

写了一个python小程序,程序每个3秒,打印一行信息出来。

使用这个命令测试:

$setsid python3 test.py

程序在后台运行起来了,并且能在shell界面上看到打印。

(与使用&的方式在后台执行命令很相似,但也有不同之处。使用&,可以通过jobs来进行前后台切换,使用setsid就不能切换,只能后台执行。setsid命令后面再跟&符号,无效。)

这种方式运行程序,logout之后,程序进程消失。

为啥大家都说使用setsid进程不会消失呢?查阅了一些资料后,改用下面这种方式测试:

$setsid python3 -u test.py > info.txt

这样测试,logout之后,程序进程还存在。测试成功!

但是,如下这个测试,也是成功的:

$setsid ping www.maixj.net

最后,我发现这样测试也可以成功

把test.py中的print函数注释掉,然后

$setsid python3 test.py

 

总结一下:

(1)有print,就要将stdout重定向到文件,setsid创建的进程在logout之后,才能一直存在;(测试失败的原因就是因为没有重定向)

(2)为什么ping也有打印,缺在logout之后,能成功呢?

我暂时只能认为,ping是系统工具,test.py是我写的代码。

(3)setsid创建的进程,父进程一直是1,即init进程,因此不受HUP信号的影响(hangup信号,即shell关闭的信号)

(4)重新login之后,是看不到任何打印输出的。

与nohup不一样的地方是,使用nohup创建进程后,父进程一开始是$$(登录的shell进程id),logout后,父进程号才变成1。相同的地方是,都要讲输出重定向(参考:使用nohup命令创建后台进程,关闭shell后进程能正常运行)。还有一个细节不同,nohup命令要配合&符号,setsid命令不需要&符号。(Linux命令行的元字符

本文链接:https://www.maixj.net/ict/setsid-20073

相关文章

留言区


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top