進程

一、描述進程-PCB

● 進程信息被放在一個叫做進程控制塊的數據結構中,表示的是進程的集合體。
● 在Linux操作系統下的PCB是task_struct
● task_struct 是Linux下內核的數據結構,它會被裝載到內存裏幷包含着進程的信息

二、進程

 ● 標識符:描述本進程的唯一標識符,用來區別其他進程
 ● 狀態:任務狀態,退出代碼,退出信號等。
 ● 優先級:相對於其他進程的優先級。
 ● 程序計數器:程序中即將被執行的下一條指令的地址
 ● 內存指針:包括程序代碼和進程相關數據的指針,還有和其他進程共享的內存塊的指針。
 ● 上下文數據:進程執行時處理器的寄存器中的數據。
 ● I/O狀態信息:包括顯示的I/O請求,分配給進程的I/O設備和被進程使用的文件列表

三、如何查看進程的信息

1)、通過ps和top等指令可查看進程信息

看一段代碼Linux操作系統下實現

#include<stdio.h>
int main()
{
	while(1)
	{
		sleep(1);
	}
	return 0;
}

在這裏插入圖片描述

2)、通過系統調用獲取進程標識符

 #include<stdio.h>
 #include<sys/types.h>
 #include<unistd.h>
 int main()
  {
      printf("pid:%d\n",getpid());
      printf("ppid:%d\n",getppid());
      return 0;
  }

在這裏插入圖片描述

這裏的pid和ppid分別是進程的id和父進程的id

3)、系統調用創建進程-fork()

● fork()有兩個返回值
● 父子進程代碼共享,但是數據各自獨有(頁表映射)。
● fork()創建進程,子進程和父進程擁有相同的代碼、虛擬地址空間(虛擬的可以相同)、頁表,但是頁表映射的物理地址空間不同。

在這裏插入圖片描述

● fork返回值起到分流作用,用戶通過fork的返回值判斷分別父子進程
  對於父進程來說子進程創建成功便返回的是子進程的ID;
  對於子進程來說返回的是0;
  創建失敗便返回小於0的數。
● 通過man 2 fork查看fork()接口。

在這裏插入圖片描述

看一段代碼演示

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<errno.h>
  4 #include<string.h>
  5 #include<stdlib.h>
  6 int main()
  7 {
  8     pid_t pid;
  9     pid=fork();
 10     if(pid<0)
 11     {
 12         perror("fork error");
 13         return -1;
 14     }
 15     else if(pid==0)
 16     {
 17         printf("child process pid is %d \n",pid);
 18     }
 19     else
 20     {
 21         printf("this is parent process:%d\n",pid);
 22     }
 23     sleep(1);
 24     return 0;
 25 }

來看看結果
在這裏插入圖片描述

當程序中沒有sleep(1)的時候程序運行結果會是如何
在這裏插入圖片描述
這裏輸出的格式完全不一致。

不瞭解前臺、後臺進程=>(https://zhidao.baidu.com/question/6036645.html)


個人理解:當創建了test1.c文件開始進行寫代碼開始運行時可看做是一個新的進程,Linux系統會把當前進程當做前臺進程,把-bash進程當做後臺進程,所以當沒有sleep時父進程的輸出是在當前進程輸出,子進程當然是在當前進程退出後,後臺bash成爲前臺進程便輸出子進程的輸出。

四、進程的狀態

Linux進程狀態:R (TASK_RUNNING),可執行狀態。
Linux進程狀態:S (TASK_INTERRUPTIBLE),可中斷的睡眠狀態.
Linux進程狀態:D (TASK_UNINTERRUPTIBLE),不可中斷的睡眠狀態。
Linux進程狀態:T (TASK_STOPPED or TASK_TRACED),暫停狀態或跟蹤狀態。
Linux進程狀態:Z (TASK_DEAD - EXIT_ZOMBIE),退出狀態,進程成爲殭屍進程。
Linux進程狀態:X (TASK_DEAD -EXIT_DEAD),退出狀態,進程即將被銷燬。

五、殭屍、孤兒進程

詳情:(https://blog.csdn.net/zcl9796/article/details/82695385)

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