linux0進程
① linux下的PID=0的進程是什麼進程
linux全局下沒有pid=0的進程
linux下的pid起始數為1
永遠是init進程
編程的時候
pid=0
同一個進程組的進程
② Linux中的進程問題,以及exit(0); 和sleep(5);
俺跟你解釋一下:
fork是一個跟當前進程一模一樣的進程,包括當前進程的所有狀態(有特殊設置就不會拷貝,如文件標識)。子進程如果不設置新的執行程序,會繼續執行fork之後的代碼,注意前面提過的跟父進程一模一樣的代碼。
pid==0代表是子進程,因此子進程會執行這段代碼:
if(pid==0)
{
printf("child!!! ");
//這里會造成子進程的主線程,main執行線程,阻塞5秒
sleep(5);
exit(0);
}
pid > 0 代表是父進程,因此父進程繼續執行的代碼為:
if(pid>0)
{
//此處必須等待子進程結束,子進程調用exit(0),時會通知父進程繼續執行
//屬於進程間通訊、同步的一個手段之一。那子進程等待5秒被喚醒,執行exit(0)
//父進程收到通知,獲取到子進程的退出狀態,繼續就會printf,基本也就是等待了5秒
//然後父進程return0等價於exit(0)正常結束
wait(NULL);//不這樣寫,父進程直接結束可能會產生僵屍進程,也可能變成孤兒進程由
//由init進程領養,並正確結束。通用的做法必須wait。根據操作系統以及版本不同處理
//方式可能不一樣,如aix可能就會有僵屍進程產生
printf("father!!! ");
}
③ linux 進程的幾種狀態
Linux內核中定義了以下幾種狀態:
#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_ZOMBIE 4
#define TASK_STOPPED 8
其中:
TASK_RUNNING是就緒態,進程當前只等待CPU資源。
TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE都是阻塞態,進程當前正在等待除CPU外的其他系統資源;前者可以被信號喚醒,後者不可以。
TASK_ZOMBIE是僵屍態,進程已經結束運行,但是進程式控制制塊尚未注銷。
TASK_STOPPED是掛起狀態,主要用於調試目的。進程接收到SIGSTOP信號後會進入該狀態,在接收到SIGCONT後又會恢復運行。
④ 為什麼Linux的0號進程永遠不能被刪除
這個是系統的啟動進程
如果你可以刪除這個進程,那你一回車系統就直接crash了
⑤ 你好,請問Linux下怎麼在終端上看到0號進程
0號進程即為idle進程或swapper進程,也就是空閑進程 idle是一個進程,其pid為0
pidof programe-name(獲得想了解的進程(programe-name)的PID)
cd /proc/$PID/fd(會看見文件描述符)
ls -l 得到文件描述符指向的實際文件,即當前進程打開的文件
也可以試試 lsof -c programe-name 看看《Linux就該這么學》 裡面有個專欄是 Linux命令大全(手冊,
⑥ linux中進程0是如何被創建的
請看 blog.csdn.net/zwjlpeng/article/details/9418229 ,解釋得相當清楚。
⑦ linux第一個進程標識符為0嗎
PID是進程標識符,你可以打開任務管理器,在菜單上點"查看","選擇列",把PID調出來,然後就可以在任務管理器裡面看到每個任務的PID了,找到PID為0,1,2,3,4,5的進程,就可以知道是哪個進程
⑧ Linux內核中進程0的主要任務是什麼
總結一下有如下幾個要點:
1.
進程0是所有其他進程的祖先,
也稱作idle進程或swapper進程.
2.
進程0是在系統初始化時由kernel自身從無到有創建.
3.
進程0的數據成員大部分是靜態定義的,即由預先定義好的INIT_TASK,
INIT_MM等宏初始化.
進程0的描述符init_task定義在arch/arm/kernel/init_task.c,由INIT_TASK宏初始化。
init_mm等結構體定義在include/linux/init_task.h內,為init_task成員的初始值,分別由對應的初始化宏如INIT_MM等初始化
Process
1
進程0最終會通過調用kernel_thread創建一個內核線程去執行init函數,這個新創建的內核線程即Process
1(這時還是共享著內核線程0的資源屬性如地址空間等)。init函數繼續完成剩餘的內核初始化,並在函數的最後調用execve系統調用裝入用戶空間的可執行程序/sbin/init,這時進程1就擁有了自己的屬性資源,成為一個普通進程(init進程)。至此,內核初始化和啟動過程結束。下面就進入了用戶空間的初始化,最後運行shell登陸界面。(註:Init進程一直存活,因為它創建和監控在操作系統外層執行的所有進程的活動。)
——————
這段對進程0的描述引用自《Understanding
The
Linux
Kernel
-
Third
Edtion》
The
ancestor
of
all
processes,
called
process
0,
the
idle
process,
or,
for
historical
reasons,
the
swapper
process,
is
a
kernel
thread
created
from
scratch
ring
the
initialization
phase
of
Linux.
This
ancestor
process
uses
the
following
statically
allocated
data
structures
(data
structures
for
all
other
processes
are
dynamically
allocated)