久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Linux進程

 sky_feiyang 2015-05-04
獲得進程ID: 
#include<sys/types.h>
#include<unistd.h>
pid_t   getpid(void)   //pid_t是一個int型

Linux是復制進程而不是創(chuàng)建進程,,有兩個函數(shù)fork()和clone(),,區(qū)別是前者是全部復制,,后者是選擇復制,。fork()和vfork()的區(qū)別是前者是全部復制,后者是只復制task_struct和系統(tǒng)堆棧,。即前者是獨立的內(nèi)存,,后者是共享的內(nèi)存。

fork():
 #include<sys/types.h>
 #include<unistd.h>
 pit_t   fork(void)
若創(chuàng)建成功,,在父進程中返回子進程ID,,在子進程中返回0。若出錯則返回-1,。
fork之后,,子進程和父進程都從調(diào)用fork函數(shù)的下一條語句開始執(zhí)行。

如下代碼:
pid_t   pid=fork();
if(pid==-1) //出錯
{
printf("Error in fork!");   exit(1);
}
else   if(pid==0)
{
                //子進程中;
}
else   //父進程中

大部分復制出來的進程一定會與父進程分道揚鑣,,執(zhí)行自己的程序,。那么就要使用exec函數(shù)族其中包括了execl、execlp,、execle,、execv、execvp,、execve 6個函數(shù),。

進程的消亡:
有兩個方式:一種是自然退出,exit()和_exit(),。第二種是異常終止,,abort()。

exit():立刻終止,,清除所有數(shù)據(jù)結構,。
#include<stdlib.h>
void   exit(int status)

_exit():   #include<unistd.h>
void   _exit(int status)

區(qū)別:exit()會首先執(zhí)行一些文件關閉操作

進程調(diào)用了exit和_exit之后并非立刻消失,而是留下一個僵尸進程的數(shù)據(jù)結構,,可以用wait和waitpid來處理,。
#include<sys/types.h>
#include<sys/wait.h>
pid_t   wait(int* status)
status用來收集進程退出的狀態(tài)(若不需要則置為NULL),若成功則返回等待進程的ID,,若失敗則返回-1,。
進程一旦調(diào)用了wait,,會立即阻塞自己。由wait自動分析是否當前進程的某個子進程已經(jīng)退出,,如果讓他找到這樣的一個已經(jīng)變成僵尸進程的子進程,,wait就會手機這個子進程的信息,并把它徹底銷毀后返回,,如果沒有找到這樣的一個子進程,,則wait會一直阻塞在這里,知道出現(xiàn)一個為止,。
如下代碼:
pid_t   pid=fork();
if(pid==-1) //出錯
{
printf("Error in fork!");   exit(1);
}
else   if(pid==0)
{
                //子進程中;
}
else   
{
pid_t   pWait=wait(NULL);   //等待子進程
}

waitpid: #include<sys/types.h>
#include<sys/wait.h>
pid_t   waitpid(pid_t pid,int* status,int options)

pid取值                                                                             含義

pid>0 只等待進程ID為pid的子進程,,不管其他已經(jīng)有多少子進程運行  結束退出,只                                 要指定的子進程還沒有結束,,則waitpid就一直等待下去,。

pid=-1 等待任何一個子進程退出,沒有任何限制,,此時等價于wait

pid=0 等待同一個進程組中的任何子進程,,如果某一個子進程已經(jīng)加入了別的進程   組,則waitpid不會對它有任何理睬

pid<-1 等待一個定制進程組中的任何子進程,,這個進程組的ID等于pid的絕對值

options目前只支持WNOHANG和WUNTRACED兩個選項

如下代碼:
pid_t   pid=fork();
if(pid==-1) //出錯
{
printf("Error in fork!");   exit(1);
}
else   if(pid==0)
{
                //子進程中;
}
else   
{
pid_t   pWait=waitpid(pid,NULL,WNOHANG);   
//參數(shù)WNOHANG表示不會等待子進程,,若沒有已退出的子進程則直接返回0
}

abort():會產(chǎn)生一個core dumped文件
#include<stdlib.h>
void   abort(void)

system():   #include<stdlib.h>
   int system(const char* cmdstring)

執(zhí)行system時會調(diào)用fork、exec,、waitpid,,因此有三種可能的返回值。
-1        fork失敗或者waitpid返回出來EINTR之外的錯誤
127        exec失敗
若都成功則返回shell的終止狀態(tài)

若cmdstring為NULL則表示僅當命令處理程序可用時返回非0,??捎糜跍y試給定的操作系統(tǒng)上是否支持system函數(shù)。























































    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多