linux 進程管理---進程環境和屬性總結

1.進程資源:

進程:系統下用戶管理事物的基本單元,每個進程有自己獨立的運行空間。

管理每個進程的資源的結構體:struct task_struct(定義在內核頭文件include/linux/sched.h)

結構體task_struct 包含的信息:線程基本信息,內存信息,tty終端信息,當前目錄信息,打開文件描述符信息信號信息以及進程屬性


2.用戶級進程狀態:

就緒/運行狀態TASK_RUNNING:正在運行或處於就緒狀態。

可被中斷等待(TASK_INTERRUPTIBLE):處於等待隊伍中,等待資源有效時喚醒,可中斷。

不可被中斷等待(TASK_UNINTERRUPTIBLE):處於等待隊伍中,等待資源有效時喚醒,但不中斷。

死狀態(TASK_ZOMBIE):即將從任務鏈表中刪除,但在task仍然有一個task_struct數據結構,等待父進程釋放。

停止狀態(TASK_STOPPED):進程已經結束,已經釋放了相應的資源,但未釋放進程控制塊,可以被喚醒。


3.進程基本屬性:

3.1.進程號(PID)不能修改:系統維護的唯一表示一個進程的正整數,無法在用戶層修改。

調用getpid()獲取當前進程的pidgetpid()在/usr/include/unistd.h中明),若失敗返回-1

實例:

#include<stdio.h>

#include<unistd.h>

int main(int argc,char *argv[])

{

        printf("the current program's pid is %d\n",getpid());

        return 0;

}

3.2父進程號(ppid),不能修改:定義如下

#include<unistd.h>

extern __pid_t getppid(void);

成功返回當前進程的父進程PID 錯誤返回 -1,錯誤原因存儲在errno

應用實例

#include<stdio.h>

#include<unistd.h>

int main(int argc,char *argv[])

{

        printf("the current program's ppid is %d\n",getppid());

        return 0;

}

運行結果:

root@ubuntu:/home/administrator/Desktop# gcc -o test test.c
[1]+  Done                    ./test 1
root@ubuntu:/home/administrator/Desktop# ./test
the current program's ppid is 3570
3.3 進程組號(PGID),一個或多個進程的集合,定義如下:

#include<unistd.h>

extern __pid_t getpgid(__pid_t pid);

應用實例:

#include<stdio.h>

#include<unistd.h>

int main(int argc, char *argv[])

{
    int i;
    printf("\t pid\t ppid \t pgid\n");
    printf("parent\t%d\t%d\t%d\n",getpid(),getppid(),getpgid(0));
    for(i=0;i<2;i++)
        if (fork()==0) printf("child\t%d\t%d\t%d\n",getpid(),getppid(),getpgid(0));
    return 0;
}

程序運行結果:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章