我已經成功創建了一個C程序,它運行一個無限循環,等待通過套接字進行連接。 我想使它成爲一個守護進程,並能夠啓動和停止它。我該怎麼做?我應該怎樣改變我的代碼以在後臺運行?D守護進程中的套接字服務器
0
A
回答
2
成爲一個守護進程所需的經典任務是:
- 更改工作目錄到根,讓你的守護程序不腳另一個安裝;
- 請致電
fork()
並有父母退出,以便該過程不是過程組長; - 將標準輸入,標準輸出和標準錯誤重定向到
/dev/null
; - 呼叫
setsid()
使過程成爲沒有控制終端的新會話的會話組領導。
沒有錯誤檢查:
chdir("/);
if (fork() > 0)
_exit();
close(0);
close(1);
close(2);
open("/dev/null", O_RDWR);
dup(0);
dup(0);
setsid();
在Linux上,glibc的提供了一個daemon()
輔助函數來執行這些任務。
+0
守護進程()也存在於非Linux系統上,儘管它不可移植。 –
+0
此答案在調用setsid時不會忽略SIGHUP,以防止父會話阻止組長對_exit(2)調用終止子進程 –
1
要運行一個c程序作爲後臺程序,您需要執行以下步驟。
// Create child process
process_id = fork();
//unmask the file mode
umask(0);
//change the directory as your home directory
strcpy(home,"HOME");
home=getenv(home);
chdir(home) ;
//set new session
sid = setsid();
close(STDIN_FILENO); open("/dev/null", O_RDWR);
close(STDOUT_FILENO); open("/dev/null", O_RDWR);
close(STDERR_FILENO); open("/dev/null", O_RDWR);
+0
這是錯誤的:更改爲/而不是HOME。 umask不是必需的。 –
相關問題
- 1. 服務器守護進程的套接字停止工作
- 2. android內部套接字連接失敗,守護進程服務
- 3. Python服務/守護進程
- 4. PHP服務(守護進程)
- 5. C++守護進程服務器停止
- 6. WHOIS服務器守護進程
- 7. 'Httpd'中的'd'代表守護進程?
- 8. 提交守護進程或服務
- 9. python守護進程+進程間通信+ web服務器
- 10. C#服務作爲Debian中的單服務守護進程
- 11. PHP中沒有守護進程的WebSocket服務器?
- 12. 守護進程 - 使用Unix套接字的客戶端IPC
- 13. 服務器響應是:5.7.1無法中繼/郵件服務器守護進程
- 14. 在Ruby on Rails中停止服務器守護進程
- 15. 定時器()作爲守護進程與非守護進程
- 16. 守護多線程服務器
- 17. 無法連接到在Azure容器服務中的Docker守護進程
- 18. 實現單線程服務器/守護進程(Python)
- 19. 扭曲的UDP服務器 - 守護進程?
- 20. 如何將我的服務器作爲守護進程運行?
- 21. 什麼用戶是Web服務器的守護進程?
- 22. 在帶有套接字的C++中與一個守護進程接口
- 23. Python Windows服務到守護進程服務
- 24. 如何在守護進程模式下運行Django服務器?
- 25. Sendmail在後臺運行一個smtp服務器(守護進程)?
- 26. 如何用rails服務器啓動resque守護進程?
- 27. 解析郵件服務器守護進程,失敗通知
- 28. 如何運行節點js服務器作爲守護進程?
- 29. Faye服務器作爲守護進程或自動啓動
- 30. 如何在服務器啓動時啓動守護進程
閱讀'APUE,Stevens和Rago,第13章,守護進程'。 – mohit
你的程序在哪個操作系統上運行? – syler