一、/proc目錄的概述
/proc目錄是一個虛擬文件系統,它提供了一個關於正在運行的系統進程的實時全面的視圖。該目錄下的內容是動態生成的,它們反映了當前正在系統中運行的進程的實時狀態。
/proc目錄下的文件和子目錄都具有一些特殊的屬性,在文件系統中不具備通常的文件或目錄該有的屬性。這些文件或目錄是在內核中維護的,它們提供了一個接口,通過這個接口可以查詢或控制進程信息。
在Linux系統中,/proc是一個非常重要的目錄。它不僅提供了一個快速的,實時的,查看進程信息的方式,而且它提供了用戶進程與內核之間的一個接口,它允許用戶訪問內存、系統狀態、運行進程等信息,這些信息很多都是以某種形式出現在/proc目錄下。
二、訪問進程信息
在/proc目錄下,以數字命名的子目錄代表着的進程ID,比如/proc/100是進程號為100的進程。可以通過在shell中輸入命令「cd /proc/$PID」進入到相應的進程目錄下,$PID是你想查看的進程ID。進入該目錄後,將可以看到各種進程相關的文件。其中,最常用的文件如下:
-stat:包含關於進程的各種統計信息,比如PID,正在運行狀態以及佔用CPU時間。 -cmdline:該文件包含一個NUL位元組終止的進程啟動命令行。 -environ:包含該進程的環境變量列表。 -mem:可以被用來訪問該進程的代表內存映像的段的文件,它的內容可以用來檢查或修改該進程的內存。 -smaps:包含有關該進程映射到它的地址空間的內存段的詳細信息。 -status:包含有關進程的當前狀態、更多特殊信息以及佔用的內存信息。 -io:包含有關該進程的I/O訪問情況的信息。
三、進程管理操作
在/proc目錄上的操作包括以下內容:
1. 殺死進程
kill命令可以殺死一個進程。它可以使用進程ID或信號來操作進程,命令格式如下:
kill [-s 信號] 進程ID
如果省略信號,則默認發送TERM信號,這將導致進程正常退出。如果信號值為9,則將強制殺死進程。如果希望殺死進程組,則指定負的進程ID。比如:
kill -9 100 kill -9 -100
2. 顯示進程信息
ps命令可以顯示當前正在運行的進程信息。使用ps命令可以列出進程的PID,狀態,運行時間等信息。命令格式如下:
ps [選項]
其中,選項可以是以下幾種:
-a:顯示所有進程,包括其他用戶的進程 -u:顯示進程的用戶ID和啟動時間 -x:顯示沒有控制終端的進程 -e:等同於-a選項
3. 創建守護進程
守護進程是在後台運行的進程,它常常用於無需用戶交互的任務,比如系統監控、日誌記錄、後台任務。在Linux中,通過fork()函數創建子進程,使子進程脫離父進程成為守護進程,在Linux中,創建一個守護進程的步驟如下:
1. fork()以創建一個新進程,父進程退出,子進程繼續執行。 2. 調用setsid()函數創建一個新的會話,這將使新進程擁有一個新的進程組ID及一個新的會話ID。 3. 關閉標準輸入、標準輸出、標準錯誤輸出。 4. 打開/dev/null文件,將標準輸入、標準輸出、標準錯誤輸出都重定向到該文件。這樣,即使程序再收到用戶輸入,也不會有任何反應。
下面是一個簡單的守護進程程序:
#include #include #include #include #include #include int main() { pid_t pid; pid = fork(); if(pid 0) { exit(EXIT_SUCCESS); } if(setsid() < 0) { exit(EXIT_FAILURE); } signal(SIGCHLD, SIG_IGN); signal(SIGHUP, SIG_IGN); pid = fork(); if(pid 0) { exit(EXIT_SUCCESS); } umask(0); chdir("/"); close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); openlog("mydaemon", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "mydaemon started"); while(1) { sleep(60); } syslog(LOG_INFO, "mydaemon terminated"); closelog(); return EXIT_SUCCESS; }
四、小結
/proc目錄是一個非常重要的Linux目錄,它提供了一個實時的,全面的,訪問進程信息的方式。通過/proc目錄,我們可以方便地查看進程信息,殺死進程,創建守護進程等等操作。在Linux相關開發和運維工作中,/proc目錄是一個非常重要的資源。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/257025.html