日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux中的守护进程

發布時間:2023/11/29 linux 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux中的守护进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、守護進程

守護進程,也叫精靈進程(daemon)

?

它和普通后臺進程的區別在于以下三點

1、守護進程自成會話,而普通后臺進程則不一定

2、守護進程不受終端的控制

3、守護進程就是后臺進程,而后臺進程不同于守護進程

?

?

?

用ps axj命令查看系統中的進程,TPGID一欄為 -1 的進程(這些進程沒有控制終端)就是守護進程。

?

?

?

二、實現

創建守護進程的步驟如下:

1、調用umask把【文件模式創建屏蔽字】 設置為 0

????由于 umask 接收的參數會被取反,所以這個 0 傳進去取反以后是最大的,也就是給該程序最大的權限

2、先fork,然后讓父進程退出

????這是因為,要設置成守護進程的進程不能使原進程組中的組長進程,所以fork的目的是創建一個子進程,這樣,這個子進程一定不會是組長進程,然后父進程就沒什么用了。

3、調用 setid 創建一個新會話

????這時,這個進程會成為新會話的首進程(也是組長進程)

4、將當前工作目錄改成根目錄

5、關閉不需要的文件描述符

6、忽略SIGCHILD信號

?

?

實現代碼如下:

?

?

?

運行后,執行 ps axj

找到剛剛的進程

?

同時還可以看到,它的父進程是 1 號進程,因此守護進程也是孤兒進程

?

不過這里要注意的是,實際使用的時候并不需要我們造這個輪子了 有現成的函數

daemon(0, 0) 就可以讓當前的進程變為孤兒進程

?

?

三、fork()兩次的原因

通常daemon的實現跟上面的實現方式還有一處不同:fork() 調用了兩次,讓后將第二個fork 創建出來的子進程作為守護進程。

?

這是因為,如果只fork一次的話那么有可能有這樣的情況:

????第一次fork之后,父進程脫離,這時候子進程成為話首進程,子進程有可能會再打開一個控制終端,一旦這種事情發生,該進程就不再是守護進程了,因為它又一次受到終端的控制了

?

?

?

因此,如果再fork一次,那么這次得到的子進程將不可能是話首進程,因此不可能再打開終端了,所以通常用這個第二次fork出的子進程作為守護進程

?

轉載于:https://blog.51cto.com/zhweizhi/1828211

總結

以上是生活随笔為你收集整理的linux中的守护进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。