第七周学习笔记
#第七周筆記##
1.內(nèi)核gdb調(diào)試報(bào)錯(cuò)
(gdb) target remote:1234 :1234: \u8fde\u63a5\u8d85\u65f6.原因是沒有凍結(jié)窗口,落了一步,絕了
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s2.聽說macro參數(shù)status并不同于wait的參數(shù)-int型指針status,咋不同啦?
活動(dòng)筆記
wait
pid_t wait(int *status)進(jìn)程調(diào)用了wait,立即阻塞父進(jìn)程,wait分析當(dāng)前進(jìn)程的某個(gè)子進(jìn)程是否已經(jīng)退出。
case1:成功,找到僵尸子進(jìn)程,wait就會(huì)收集子進(jìn)程信息,徹底銷毀,返回;
case2:失敗,沒有找到僵尸子進(jìn)程,wait一直阻塞在這里,直到有一個(gè)出現(xiàn)。
參數(shù)status用來保存被收集進(jìn)程退出時(shí)的一些狀態(tài),它是一個(gè)指向int類型的指針,可以設(shè)定這個(gè)參數(shù)為NULL。
case1:wait成功,返回被收集的子進(jìn)程的進(jìn)程ID;
case2:調(diào)用失敗,調(diào)用進(jìn)程沒有子進(jìn)程,wait返回-1,同時(shí)errno被置為ECHILD。
示例:
編譯并運(yùn)行:
$ gcc wait1.c -o wait1 $ ./wait1宏macro:
1.WIFEXITED(status):子進(jìn)程是否為正常退出的。
若是,返回一個(gè)非零值(請(qǐng)注意,雖然名字一樣,這里的參數(shù)status并不同于wait唯一的參數(shù)---指向整數(shù)的指針status,而是那個(gè)指針?biāo)赶虻恼麛?shù),切記不要搞混了)
2、WEXITSTATUS(status) :子進(jìn)程返回值。
case1:返回非零值,提取子進(jìn)程的返回值;
case2:如果子進(jìn)程調(diào)用exit(5)退出,返回5;
case3:如果子進(jìn)程調(diào)用exit(7),返回7;
case4:不是正常退出的,返回0無意義。
示例:
編譯并運(yùn)行:
$ gcc wait2.c -o wait2 $ ./wait2waitpid
waitpid多出了兩個(gè)可由用戶控制的參數(shù)pid和options.
pid:
pid>0,只等待進(jìn)程ID等于pid的子進(jìn)程;
pid=0,等待同一個(gè)進(jìn)程組中的任何子進(jìn)程(如果子進(jìn)程已經(jīng)加入了別的進(jìn)程組,waitpid不care);
pid=-1,等待任何一個(gè)子進(jìn)程退出;
pid<-1,等待指定進(jìn)程組中的任何子進(jìn)程,進(jìn)程組的ID等于pid的絕對(duì)值。
options:
Linux中只支持WNOHANG和WUNTRACED兩個(gè)選項(xiàng),這是兩個(gè)常數(shù),可以用"|"運(yùn)算符把它們連接起來使用。
WNOHANG參數(shù)調(diào)用waitpid,即使沒有子進(jìn)程退出,它也會(huì)立即返回,不會(huì)像wait那樣永遠(yuǎn)等下去。
WUNTRACED參數(shù)用的很少。
示例
可以把options設(shè)為0.
ret=waitpid(-1,NULL,0); static inline pid_t wait(int * wait_stat) { return waitpid(-1,wait_stat,0); }返回值和錯(cuò)誤:
case1:waitpid返回收集到的子進(jìn)程的進(jìn)程ID;
case2:設(shè)置了選項(xiàng)WNOHANG,而調(diào)用中waitpid發(fā)現(xiàn)沒有已退出的子進(jìn)程可收集,則返回0;
case3:調(diào)用中出錯(cuò),則返回-1,這時(shí)errno會(huì)被設(shè)置成相應(yīng)的值以指示錯(cuò)誤所在;
case4:pid所指示的子進(jìn)程不存在,或此進(jìn)程存在,但不是調(diào)用進(jìn)程的子進(jìn)程,waitpid就會(huì)出錯(cuò)返回,這時(shí)errno被設(shè)置為ECHILD;
示例
編譯并運(yùn)行:
```
$ cc waitpid.c -o waitpid
$ ./waitp
轉(zhuǎn)載于:https://www.cnblogs.com/Ychancy/p/10017658.html
總結(jié)
- 上一篇: mongodb基本指令与高级查询指令以及
- 下一篇: cqoi2018