進程管理:理解和操作/proc目錄

一、/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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:43
下一篇 2024-12-15 12:43

相關推薦

  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • Rclone複製所有目錄

    如果你需要將本地文件複製到雲端,或者從雲端複製文件到本地,Rclone是一個非常好的選擇。本文將介紹如何使用Rclone複製所有目錄。 一、安裝Rclone 首先,你需要在你的機器…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 如何通過jstack工具列出假死的java進程

    假死的java進程是指在運行過程中出現了某些問題導致進程停止響應,此時無法通過正常的方式關閉或者重啟該進程。在這種情況下,我們可以藉助jstack工具來獲取該進程的進程號和線程號,…

    編程 2025-04-29
  • Python磁盤操作全方位解析

    本篇文章將從多個方面對Python磁盤操作進行詳細闡述,包括文件讀寫、文件夾創建、刪除、文件搜索與遍歷、文件重命名、移動、複製、文件權限修改等常用操作。 一、文件讀寫操作 文件讀寫…

    編程 2025-04-29
  • Python代碼實現迴文數最少操作次數

    本文將介紹如何使用Python解決一道經典的迴文數問題:給定一個數n,按照一定規則對它進行若干次操作,使得n成為迴文數,求最少的操作次數。 一、問題分析 首先,我們需要了解迴文數的…

    編程 2025-04-29
  • 二級考級舞蹈大全目錄

    本文將從以下多個方面對二級考級舞蹈大全目錄進行詳細闡述。 一、目錄結構 二級考級舞蹈大全目錄主要分為三級,即一級目錄、二級目錄和三級目錄。其中,一級目錄為舞蹈類型,二級目錄為舞蹈名…

    編程 2025-04-29
  • Python元祖操作用法介紹

    本文將從多個方面對Python元祖的操作進行詳細闡述。包括:元祖定義及初始化、元祖遍歷、元祖切片、元祖合併及比較、元祖解包等內容。 一、元祖定義及初始化 元祖在Python中屬於序…

    編程 2025-04-29
  • Python列表的讀寫操作

    本文將針對Python列表的讀取與寫入操作進行詳細的闡述,包括列表的基本操作、列表的增刪改查、列表切片、列表排序、列表反轉、列表拼接、列表複製等操作。 一、列表的基本操作 列表是P…

    編程 2025-04-29

發表回復

登錄後才能評論