新聞中心
在Linux系統(tǒng)中,后臺運行程序是一種非常常見的操作。這種操作可以使程序在后臺默默地運行,而不會打擾到用戶的當前工作。也就是說,無論何時用戶需要該程序,只需要調用運行該程序的命令即可。在本文中,我們將介紹如何在Linux系統(tǒng)中讓C程序以后臺運行的方法,以及如何利用Linux系統(tǒng)提供的一些機制來維護運行在后臺的程序。

10年積累的成都網站設計、做網站經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有新晃免費網站建設讓你可以放心的選擇與我們合作。
1. Linux后臺運行環(huán)境
在Linux系統(tǒng)中,所有進程都是由其他進程 fork() 出來的。在Linux系統(tǒng)的基本架構中,每個進程都有一個父進程,但同時也可以有多個子進程。當一個進程 fork() ,它會復制一份與父進程相同的代碼和數據,但是這個新的進程會擁有自己的進程ID(pid)。根據進程的不同性質,可以將進程分為前臺進程和后臺進程。前臺進程是與用戶交互的進程,而后臺進程是在后臺運行的進程,不與用戶進行交互。
Linux環(huán)境下后臺運行的程序一般使用守護進程來實現。守護進程是指在后臺運行的沒有控制終端的進程。通過守護進程,我們可以實現程序的后臺運行。守護進程的實現需要先將運行目錄切換到根目錄,然后調用 umask() 設置文件掩碼,防止寫的日志文件權限為所有用戶可讀寫。
2. 守護進程實現
在Linux環(huán)境下,一個典型的守護進程通常由以下這些步驟組成:
① fork()一個新進程,然后父進程退出,并使新建的子進程稱為新的會話的首進程。
② 在新會話中創(chuàng)建一個新文件夾,并使其成為當前工作目錄。
③ 關閉所有的文件描述符。(0, 1, 2除外)
④ 讓標準輸入,輸出和標準錯誤文件描述符指向/dev/null。
⑤ 在守護進程開始運行之前,通過調用 umask() 來設置文件創(chuàng)建掩碼。
下面是一個示例程序:
“`c
int mn(int argc, char *argv[])
{
pid_t pid = 0;
int fd, i;
pid = fork();
if (pid == -1)
{
printf(“Fled to fork.\n”);
exit(1);
}
if (pid > 0)
{
printf(“Parent process exit.\n”);
exit(0);
}
setsid();
umask(0);
if (chdir(“/”)
{
printf(“Fled to change working directory.\n”);
exit(1);
}
fd = open(“/dev/null”, O_RDWR, 0);
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
close(fd);
while(1) { sleep(60); }
return 0;
}
“`
在這個程序中,我們先使用 fork() 創(chuàng)建一個新進程。如果創(chuàng)建的新進程為0,則為子進程,繼續(xù)對它進行處理。子進程先調用 setsid() 方法,使其成為一個新的會話(這就是使進程成為守護進程的之一步)。接著,我們調用 umask() 來設置權限掩碼,防止文件被惡意創(chuàng)建者讀取或破壞。然后使用 chdir() 來把工作目錄切換到根目錄。關閉所有權限大于 2 的文件描述符(即 stdin, stdout 和 stderr),并將它們的文件描述符重新指向 /dev/null。在最后一個步驟完成之后,我們可以自由地在后臺運行程序了。
3. 如何在Linux系統(tǒng)中查看后臺進程
在Linux系統(tǒng)中,我們可以通過命令 ps -ef 來查看所有正在運行的進程列表。但有時,這些列表中包含的信息可能會讓人感到困惑。因此,我們可以通過 grep 命令來篩選我們需要查找的進程。例如,如果我們要查找進程名為 “my_app” 的所有進程,則可以使用以下命令:
“`bash
$ ps -ef | grep my_app
“`
在執(zhí)行這個命令之后,系統(tǒng)會返回匹配的所有進程。其中,之一列是進程ID,第二列是該進程的所屬用戶,第三列是該進程的狀態(tài),以及后續(xù)列則是進程的完整路徑。
4. 如何結束一個后臺進程
有時,我們需要結束一個運行在后臺的進程,以便我們重新啟動或更改其配置文件。在Linux系統(tǒng)中,我們可以通過 kill 命令來結束一個進程。這個命令的語法如下:
“`bash
$ kill
“`
其中, 就是我們要結束的進程ID。在發(fā)送 kill 命令后,進程就會被結束。如果該進程無法正常結束,我們可以使用 kill -9 命令來強制結束進程。此命令不會發(fā)送任何信號給進程,而是直接強制結束該進程。
相關問題拓展閱讀:
- 怎么用Linux運行C程序?
怎么用Linux運行C程序?
不一定非要用vi 編輯器 那個很不方便(個人觀點) 可以使用gedit geany emacs 等等
比如編寫棗則亮好了一個文件test.c 使用gcc /g++ -o test test.c進行編譯 有很多凳寬盯物編譯選項你自己看著加 編譯完成后執(zhí)行 ./test 就可以運行了
關于linux c 后臺運行的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。
成都網站營銷推廣找創(chuàng)新互聯(lián),全國分站站群網站搭建更好做SEO營銷。
創(chuàng)新互聯(lián)(www.cdcxhl.com)四川成都IDC基礎服務商,價格厚道。提供成都服務器托管租用、綿陽服務器租用托管、重慶服務器托管租用、貴陽服務器機房服務器托管租用。
分享標題:Linux C程序后臺運行實現方法大揭秘 (linux c 后臺運行)
文章源于:http://m.5511xx.com/article/cdpodjh.html


咨詢
建站咨詢
