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環境高級編程中說?進程的最后一個線程在啟動例程中?執行返回語句,該進程正常終止,但是,該線程的返回值不會用作進程的返回值,當最后一個線程從其啟動例程返回時,該進程以終止狀態0返回
問題1:請問什么是啟動例程?是main函數嗎?
問題2:最后一個線程是指什么?是主線程嗎?是不是上面那個調用?pthread_create?函數的線程?如果是的話,這個線程跟進程有什么區別,根據書上說,最后一個線程在啟動例程里執行返回語句,進程終止,但是線程的返回值不會作為進程的返回值,我這里有弄不明白了,我上面這個程序的?最后一個線程是主線程?它在main函數中執行return??127;進程終止,根據書上說進程的退出狀態應該是0?才對,但是我用?echo?$??來查看進程的退出狀態?卻是?127?。
請各位高手指點,書上所說的最后一個線程是指什么?最后一個線程的返回值和進程的返回區別在那里,是不是在main函數中執行的return?語句?不是線程的返回語句,而是進程的返回語句。如果是進程的返回語句,那如果要讓最后一個線程在啟動例程里執行返回語句?用什么方法執行呢?
|
啟動例程翻譯得不準確
main函數是啟動例程,void?*fun(void?*arg)?也是函數例程
就是指進程或線程的執行主體
最后一個線程就是最后一個結束的線程,例子中主線程sleep(1);所以它最后結束。沒有sleep(1);,那誰先結束就不能確定了
線程的返回值是?pthread_exit((void?*?1));?傳遞的
return?傳遞的是進程的返回值
|
根據書上說進程的退出狀態應該是0?才對,但是我用?echo?$??來查看進程的退出狀態?卻是?127
那是因為你程序退出的時候搞了個返回值return?127
在linux下的程序一般都是正常結束返回0或者以0的狀態退出?程序異常或者錯誤才以非0的值退出?我看了一些源碼大概都是這樣的規則
最后一個進程?從字面上來看就是最后一個退出的進程??建議樓主在讀外文著作的時候不要只讀翻譯過來的東西?應該下個原版?在某些概念有疑問的時候?去原版的地方看看
|
1、啟動例程就是你的線程實際執行的函數體代碼,在這里也就是你的>fun()
2、進程的最后一個線程就是在進程執行完之前最晚結束的那個線程。但是你這里進程只開了一個線程,所以最后一個線程就是你開的那個線程>thread了。
據我理解,線程的返回值是線程執行的一種狀態,不知道是不是正確。
|
是
|
在UNIX環境高級編程中說?進程的最后一個線程在啟動例程中?執行返回語句,該進程正常終止,但是,該線程的返回值不會用作進程的返回值,當最后一個線程從其啟動例程返回時,該進程以終止狀態0返回
問題1:請問什么是啟動例程?是main函數嗎?
意思就是指執行該線程代碼的進程段。
問題2:最后一個線程是指什么?是主線程嗎?是不是上面那個調用?pthread_create?函數的線程?如果是的話,這個線程跟進程有什么區別,根據書上說,最后一個線程在啟動例程里執行返回語句,進程終止,但是線程的返回值不會作為進程的返回值,我這里有弄不明白了,我上面這個程序的?最后一個線程是主線程?它在main函數中執行return??127;進程終止,根據書上說進程的退出狀態應該是0?才對,但是我用?echo?$??來查看進程的退出狀態?卻是?127?。
一個進程下可以創建多個線程,最后一個退出的子線程就是最后一個線程啊。
至于你說的返回值,要清楚,線程返回值通過pthread_exit實現,return就是進程返回。
請各位高手指點,書上所說的最后一個線程是指什么?最后一個線程的返回值和進程的返回區別在那里,是不是在main函數中執行的return?語句?不是線程的返回語句,而是進程的返回語句。如果是進程的返回語句,那如果要讓最后一個線程在啟動例程里執行返回語句?用什么方法執行呢?
總結
以上是生活随笔為你收集整理的linux+kill+进程和线程,在LINUX系统中 关于进程和线程终止的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android录屏软件冲突,关于Andr
- 下一篇: linux uefi无法启动文件,解决U