linux+kill+进程和线程,在LINUX系统中 关于进程和线程终止的问题
#include
#include
pthread_t?thread;
void?*fun(void?*arg)
{
printf("hell0n");
pthread_exit((void?*?1));
}
int?main(void)
{
pthread_create(&thread,NULL,fun,NULL);
sleep(1);
return?127;
}
在UNIX環(huán)境高級(jí)編程中說?進(jìn)程的最后一個(gè)線程在啟動(dòng)例程中?執(zhí)行返回語句,該進(jìn)程正常終止,但是,該線程的返回值不會(huì)用作進(jìn)程的返回值,當(dāng)最后一個(gè)線程從其啟動(dòng)例程返回時(shí),該進(jìn)程以終止?fàn)顟B(tài)0返回
問題1:請(qǐng)問什么是啟動(dòng)例程?是main函數(shù)嗎?
問題2:最后一個(gè)線程是指什么?是主線程嗎?是不是上面那個(gè)調(diào)用?pthread_create?函數(shù)的線程?如果是的話,這個(gè)線程跟進(jìn)程有什么區(qū)別,根據(jù)書上說,最后一個(gè)線程在啟動(dòng)例程里執(zhí)行返回語句,進(jìn)程終止,但是線程的返回值不會(huì)作為進(jìn)程的返回值,我這里有弄不明白了,我上面這個(gè)程序的?最后一個(gè)線程是主線程?它在main函數(shù)中執(zhí)行return??127;進(jìn)程終止,根據(jù)書上說進(jìn)程的退出狀態(tài)應(yīng)該是0?才對(duì),但是我用?echo?$??來查看進(jìn)程的退出狀態(tài)?卻是?127?。
請(qǐng)各位高手指點(diǎn),書上所說的最后一個(gè)線程是指什么?最后一個(gè)線程的返回值和進(jìn)程的返回區(qū)別在那里,是不是在main函數(shù)中執(zhí)行的return?語句?不是線程的返回語句,而是進(jìn)程的返回語句。如果是進(jìn)程的返回語句,那如果要讓最后一個(gè)線程在啟動(dòng)例程里執(zhí)行返回語句?用什么方法執(zhí)行呢?
|
啟動(dòng)例程翻譯得不準(zhǔn)確
main函數(shù)是啟動(dòng)例程,void?*fun(void?*arg)?也是函數(shù)例程
就是指進(jìn)程或線程的執(zhí)行主體
最后一個(gè)線程就是最后一個(gè)結(jié)束的線程,例子中主線程sleep(1);所以它最后結(jié)束。沒有sleep(1);,那誰先結(jié)束就不能確定了
線程的返回值是?pthread_exit((void?*?1));?傳遞的
return?傳遞的是進(jìn)程的返回值
|
根據(jù)書上說進(jìn)程的退出狀態(tài)應(yīng)該是0?才對(duì),但是我用?echo?$??來查看進(jìn)程的退出狀態(tài)?卻是?127
那是因?yàn)槟愠绦蛲顺龅臅r(shí)候搞了個(gè)返回值return?127
在linux下的程序一般都是正常結(jié)束返回0或者以0的狀態(tài)退出?程序異常或者錯(cuò)誤才以非0的值退出?我看了一些源碼大概都是這樣的規(guī)則
最后一個(gè)進(jìn)程?從字面上來看就是最后一個(gè)退出的進(jìn)程??建議樓主在讀外文著作的時(shí)候不要只讀翻譯過來的東西?應(yīng)該下個(gè)原版?在某些概念有疑問的時(shí)候?去原版的地方看看
|
1、啟動(dòng)例程就是你的線程實(shí)際執(zhí)行的函數(shù)體代碼,在這里也就是你的>fun()
2、進(jìn)程的最后一個(gè)線程就是在進(jìn)程執(zhí)行完之前最晚結(jié)束的那個(gè)線程。但是你這里進(jìn)程只開了一個(gè)線程,所以最后一個(gè)線程就是你開的那個(gè)線程>thread了。
據(jù)我理解,線程的返回值是線程執(zhí)行的一種狀態(tài),不知道是不是正確。
|
是
|
在UNIX環(huán)境高級(jí)編程中說?進(jìn)程的最后一個(gè)線程在啟動(dòng)例程中?執(zhí)行返回語句,該進(jìn)程正常終止,但是,該線程的返回值不會(huì)用作進(jìn)程的返回值,當(dāng)最后一個(gè)線程從其啟動(dòng)例程返回時(shí),該進(jìn)程以終止?fàn)顟B(tài)0返回
問題1:請(qǐng)問什么是啟動(dòng)例程?是main函數(shù)嗎?
意思就是指執(zhí)行該線程代碼的進(jìn)程段。
問題2:最后一個(gè)線程是指什么?是主線程嗎?是不是上面那個(gè)調(diào)用?pthread_create?函數(shù)的線程?如果是的話,這個(gè)線程跟進(jìn)程有什么區(qū)別,根據(jù)書上說,最后一個(gè)線程在啟動(dòng)例程里執(zhí)行返回語句,進(jìn)程終止,但是線程的返回值不會(huì)作為進(jìn)程的返回值,我這里有弄不明白了,我上面這個(gè)程序的?最后一個(gè)線程是主線程?它在main函數(shù)中執(zhí)行return??127;進(jìn)程終止,根據(jù)書上說進(jìn)程的退出狀態(tài)應(yīng)該是0?才對(duì),但是我用?echo?$??來查看進(jìn)程的退出狀態(tài)?卻是?127?。
一個(gè)進(jìn)程下可以創(chuàng)建多個(gè)線程,最后一個(gè)退出的子線程就是最后一個(gè)線程啊。
至于你說的返回值,要清楚,線程返回值通過pthread_exit實(shí)現(xiàn),return就是進(jìn)程返回。
請(qǐng)各位高手指點(diǎn),書上所說的最后一個(gè)線程是指什么?最后一個(gè)線程的返回值和進(jìn)程的返回區(qū)別在那里,是不是在main函數(shù)中執(zhí)行的return?語句?不是線程的返回語句,而是進(jìn)程的返回語句。如果是進(jìn)程的返回語句,那如果要讓最后一個(gè)線程在啟動(dòng)例程里執(zhí)行返回語句?用什么方法執(zhí)行呢?
總結(jié)
以上是生活随笔為你收集整理的linux+kill+进程和线程,在LINUX系统中 关于进程和线程终止的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android录屏软件冲突,关于Andr
- 下一篇: 计算机数学基础 刘树利,计算机数学基础