当前位置: 技术问答>linux和unix
在LINUX系统中 关于进程和线程终止的问题
来源: 互联网 发布时间:2016-08-02
本文导语: #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环境高级编程中说 进程的最后一...
#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 语句 不是线程的返回语句,而是进程的返回语句。如果是进程的返回语句,那如果要让最后一个线程在启动例程里执行返回语句 用什么方法执行呢?
#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 传递的是进程的返回值
main函数是启动例程,void *fun(void *arg) 也是函数例程
就是指进程或线程的执行主体
最后一个线程就是最后一个结束的线程,例子中主线程sleep(1);所以它最后结束。没有sleep(1);,那谁先结束就不能确定了
线程的返回值是 pthread_exit((void * 1)); 传递的
return 传递的是进程的返回值
|
根据书上说进程的退出状态应该是0 才对,但是我用 echo $? 来查看进程的退出状态 却是 127
那是因为你程序退出的时候搞了个返回值return 127
在linux下的程序一般都是正常结束返回0或者以0的状态退出 程序异常或者错误才以非0的值退出 我看了一些源码大概都是这样的规则
最后一个进程 从字面上来看就是最后一个退出的进程 建议楼主在读外文著作的时候不要只读翻译过来的东西 应该下个原版 在某些概念有疑问的时候 去原版的地方看看
那是因为你程序退出的时候搞了个返回值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 语句 不是线程的返回语句,而是进程的返回语句。如果是进程的返回语句,那如果要让最后一个线程在启动例程里执行返回语句 用什么方法执行呢?
问题1:请问什么是启动例程?是main函数吗?
意思就是指执行该线程代码的进程段。
问题2:最后一个线程是指什么?是主线程吗?是不是上面那个调用 pthread_create 函数的线程?如果是的话,这个线程跟进程有什么区别,根据书上说,最后一个线程在启动例程里执行返回语句,进程终止,但是线程的返回值不会作为进程的返回值,我这里有弄不明白了,我上面这个程序的 最后一个线程是主线程 它在main函数中执行return 127;进程终止,根据书上说进程的退出状态应该是0 才对,但是我用 echo $? 来查看进程的退出状态 却是 127 。
一个进程下可以创建多个线程,最后一个退出的子线程就是最后一个线程啊。
至于你说的返回值,要清楚,线程返回值通过pthread_exit实现,return就是进程返回。
请各位高手指点,书上所说的最后一个线程是指什么?最后一个线程的返回值和进程的返回区别在那里,是不是在main函数中执行的return 语句 不是线程的返回语句,而是进程的返回语句。如果是进程的返回语句,那如果要让最后一个线程在启动例程里执行返回语句 用什么方法执行呢?