后台進程不等於守護進程


http://www.360doc.com/content/12/0731/15/1429472_227474394.shtml

 

之前一直在模糊化這兩個概念,其實兩者不等於。

為什么?最重要的區別,也是最直觀的區別,守護進程沒有控制終端,而后台進程還有。

通過這樣的方式啟動firefox, 
#firefox &
firefox現在在后台運行了,但是它等於守護進程嗎?不!
因為它並沒有脫離控制終端,不信?你試着吧啟動firefox的終端關掉,看看firefox會不會跟着一起關閉。 

1. 后台的文件描述符也是繼承於父進程,例如shell,所以它也可以在當前終端下顯示輸出數據。

但是daemon進程自己變成了進程組長,其文件描述符號和控制終端沒有關聯,是控制台無關的。

 

2.基本上任何一個程序都可以后台運行,但守護進程是具有特殊要求的程序,比如要脫離自己的父進程,成為自己的會話組長等,這些要在代碼中顯式地寫出來


換句話說,守護進程肯定是后台進程,但反之不成立。守護進程顧名思義,主要用於一些長期運行,守護着自己的職責(監聽端口,監聽服務等)。我們的系統下就有很多守護進程。

 

3.守護進程成為了進程組長(或者會話組長),和控制終端失去了聯系(其文件描述符也是繼承於父進程的,但是在變成守護進程的同時stdin,stdout,stderr和控制台失去聯系了)

 

有沒有誰知道如何阻塞Linux后台守護進程(比如cupsd),並在一段時間后解除阻塞狀態,謝謝!

純粹的定時睡眼可以用sleep,usleep ,,,, select/poll/epoll....
除sleep外,別的精度都比較高.

如果是還帶條件喚醒的話,就用mutex+cond,,,sem, pipe+select/poll/epoll等等都可以做到.
pthread_mutex_timedlock
pthread_cond_timedwait...

新增一個為空的文件,文件一直存在就守護。進程運行完畢,刪除文件

 

給此守護進程發送SIGSTOP信號即可!
若要其恢復,則發送SIGCONT信號

shell命令中用kill -SIGSTOP pid,
kill -SIGCONT pid

 

嘗試着給cupsd進程發送了SIGSTOP信號(這個停止信號是在我的程序中發的),但執行結果是sh: line 0: kill: SIGSTOP: invalid signal specification

但單獨執行kill -SIGSTOP pid卻是可以的!不知道為什么,難道我獲取的PID有問題!

你好,通過這種方式確實將后台的守護進程給在暫停了,但是恢復后並不能繼續執行暫停前的任務啊!
PS:我的需求是這樣的,上層應用程序將打印任務下發到打印緩沖隊列中,而后台打印守護進程(cupsd)從緩沖隊列中獲取打印數據區打印。我想在打印守護進程獲取打印數據之前將其阻塞,即先讓打印守護進程停下來,等我將打印緩沖隊列中的文件做了分析之后,再恢復打印守護進程,讓其去打印。
    通過發信號的方式確實讓打印守護進程停下來了,但是等我分析完成之后,恢復打印守護進程,並不能打印我之前的任務啊!
    請問問題出在哪啊!謝謝

和cupsd的實現有關,

 

如題,我寫了一個很小的程序,從控制台輸入一個字符。啟動程序以后,發送一個SIGSTOP給他。
[*]#include[*]#include[*]int main(void)[*]{[*] printf("beforen");
[*] getchar();[*] printf("aftern");[*] return 0;}
然后在第一個終端里面:#g++ w.cpp && ./a.out在第二個終端里面
:#pgrep a.out|xargs kill -s SIGSTOP此時,可以看到第一個終端里面變成了:# ./a.outbefore[1]+ Stopped ./a.out
#問題: 如何能夠使得a.out恢復運行,也就是可以讓我在第一個終端里面繼續運行a.out並接受用戶輸入?
可以做到么? 如果不可以做到,那么SIGSTOP到底有什么用途?謝謝。


回復 3# weichuang02 fg命令發送了SIGCONT信號。信號不能使一個進程成為前台進程,
SIGCONT可以使它繼續運行(在后台運行),但你的程序做不到。因為你的程序在等待終端輸入,而它不是前台進程,
所以SIGCONT后無法讀取,然后會產生SIGTTIN信號,而這個信號的默認動作是使進程暫停執行,所以不會繼續執行。

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM