程序等待與退出

2021-09-01 11:35:53 字數 1599 閱讀 2546

*      程序等待就是等待子程序的狀態改變,獲取子程序的退出狀態碼, 允許系統釋放子程序的所有資源,這時候子程序在所有資源才會被釋放掉。

*      程序等待是避免產生殭屍程序的主要方式

程序等待的方式:

1. pid_t wait(int *status)

status 用於獲取子程序 退出狀態碼

返回值是返回退出的子程序pid

wait 函式目的就是為了等待任意乙個子程序的退出

因為wait是乙個阻塞型的函式,因此如果沒有子程序退出

那麼他就一直等待,直到有子程序退出

2. pid_t waitpid(pid_t pid, int *status, int options);

pid:    -1:等待任意子程序 >0 等待指定的子程序

status: 獲取退出狀態碼

options:0:阻塞    wnohang:非阻塞

返回值:-1:出錯  ==0:沒有子程序退出 >0:退出的子程序pid

waitpid是乙個阻塞/非阻塞可選的函式

具體**實現:

#include #include #include #include int main()

else if (pid == 0)

pid_t id = -1;

if ((id = wait(null)) < 0)

int status = -1;

while((id = waitpid(pid, &status, wnohang)) == 0)

if ((status & 0x7f) == 0)

if (wifexited(status))

while(1)

printf("child :%d eixt %d\n", id, pid);

return 0;

}

程序退出:

其中主要退出形式有:1.**執行完畢退出 a 結果正確  b結果不正確

2.**異常退出

正常中止:1. main函式中return

2. exit(int status)庫函式呼叫在程式任意位置呼叫都會使程序退出

status是程序的退出狀態

3. _exit(int status)系統呼叫介面在程式任意位置呼叫都會使程序退出

exit最終呼叫的就是這個介面退出的

exit與_exit的區別

*          exit是溫和性的退出,在退出前會溫和的釋放資源,重新整理緩衝區

*          _exit是暴力退出,直接釋放資源退出,不會重新整理緩衝區

具體demo如下:

#include #include #include #include #include int errno;

int main()

printf("%s\n", strerror(errno));

perror("fdgfhgj");

printf("hello world");

//exit(0);

_exit(0);

sleep(3);

return 0;

}

建立程序並等待程序退出

cereatepross.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include include using namespace std bool findandkillprocessbyname lpctstr strp...

程序的建立,等待,退出,

標頭檔案 include 定義函式 int system const char string 函式說明 system 會呼叫fork 產生子程序,由子程序來呼叫 bin sh c string來執行引數string字串所代表的命令,此命令執行完後隨即返回原呼叫的程序。在呼叫system 期間sigc...

程序的等待和退出

等待和退出實際上是父子程序之間的一種互動,完成子程序的資源 關於wait 的實現,實際上是把程序的狀態改為 sleep 那麼這兩者誰先發生呢?先後順序有什麼影響?1.當有子程序存活時,父程序進入等待狀態,等待子程序的返回結果 當某子程序呼叫exit 時,喚醒父程序,將exit 返回值作為父程序中wa...