㈠ linux线程的几种结束方式
Linux线程的几种结束方式
Linux创建线程使用
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void *), void *arg)
1
2
Linux线程的几种结束方式:
调用pthread_exit(exit_code),exit_code为线程退出的状态代码。同一进程下的其他线程可以通过pthread_join(exit_code)来使用。
函数start_routine使用return返回,与调用pthread_exit()作用相同。
线程被取消pthread_cancel()。
同一进程中的其他线程调用了exit(),,或者主线程从main函数返回。
㈡ linux 进程退出 线程怎么关闭
一般情况会自己关闭,如果很长时间都还在,就强制kill -9
㈢ 在Linux编程中,父进程为什么要等待并回收子进程的退出状态不这样做会有什么后果
分几种情况:
父进程永不退出:这种情况下若子进程退出,而父进程没有收集子进程的退出状态,则此子进程会变为僵尸进程,一直占用少量资源,有危害;
父进程比子进程先退出:这种情况下父进程退出时,仍在运行的子进程会变为孤儿进程,孤儿进程会被托管给init进程,孤儿进程结束时由init进程负责回收;
父进程比子进程晚退出:子进程先退出时会变为僵尸进程,占用少量资源;待到父进程再退出时,子进程由僵尸进程变为孤儿进程,init进程会回收这些已僵死的孤儿进程,则这些已经僵死的孤儿进程就能瞑目而去了;
㈣ linux子线程挂掉主线程会退出吗
会的。例如段错误之类的错误,直接会导致程序退出。 所以你要主线程还能正常运行的,就要对子线程的错误做错误处理。
㈤ linux怎么查看线程阻塞原因
linux查看线程阻塞原因:pthread_join一般主线程来调用,用来等待子线程退出,因为是等待,所以是阻塞的,一般主线程会依次join所有它创建的子线程。
1)执行top命令,或使用-H选项(显示所有线程),找到相关的高CPU的PID。
2)生成thread mp 快照(kill -3 PID)。
3)将top命令输出PID转换为HEX格式(16进制)。
4)在thread mp data中搜索nid=<Hex PID>。
5)分析受影响的thread和stack trace,精确定位代码。
特点:
Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。
它除了在服务器方面保持着强劲的发展势头以外,在个人电脑、嵌入式系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。
Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,甚至当作网络防火墙,这是Linux的一大亮点。
Linux具有开放源码、没有版权、技术社区用户多等特点,开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。
㈥ LINUX里,父进程退出了,子进程一定会退出吗
不。
若父进程退出,子进程尚未结束,则子进程会被init进程领养,也就是说init进程将成为该子进程的父进程。
若希望父进程退出,子进程也退出的话,可以使用线程,因为若进程结束,则还没结束的线程一定会立刻结束。或者如楼上所说,用信号,用atexit注册一个退出时执行的函数,这个函数中发送信号给子进程即可。
㈦ linux下C中怎么让才能安全关闭线程
多线程退出有三种方式:
(1)执行完成后隐式退出;
(2)由线程本身显示调用pthread_exit 函数退出;
pthread_exit (void * retval) ;
(3)被其他线程用pthread_cance函数终止:
pthread_cance (pthread_t thread) ;
用event来实现。
在子线程中,在循环内检测event。
while(!e.is_active())
{
...
}
当退出循环体的时候,自然return返回。这样子线程会优雅的结束。
注意:选用非等待的检测函数。
pthread 线程有两种状态,joinable(非分离)状态和detachable(分离)状态,默认为joinable。
joinable:当线程函数自己返回退出或pthread_exit时都不会释放线程所用资源,包括栈,线程描述符等(有人说有8k多,未经验证)。
detachable:线程结束时会自动释放资源。
Linux man page said:
When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until another thread performs pthread_join on it. Therefore, pthread_join must be called once for each joinable thread created to avoid memory leaks.
因此,joinable 线程执行完后不使用pthread_join的话就会造成内存泄漏。
解决办法:
1.// 创建线程前设置 PTHREAD_CREATE_DETACHED 属性
pthread_attr_t attr;
pthread_t thread;
pthread_attr_init (&attr);
pthread_attr_setdetachstat(&attr, PTHREAD_CREATE_DETACHED);
pthread_create (&thread, &attr, &thread_function, NULL);
pthread_attr_destroy (&attr);
2.当线程为joinable时,使用pthread_join来获取线程返回值,并释放资源。
3.当线程为joinable时,也可在线程中调用 pthread_detach(pthread_self());来分离自己。
㈧ Linux C中父进程退出时,使用什么方法可使子进程退出
发信号,kill(子进程ID, SIG信号)
如果不只一个子进程,需要把所有的子进程ID存起来,然后用上述方法一个一个的kill
SIG信号需要能使子进程退出,如SIGQUIT,SIGINT...等一些默认的信号;也可以在子进程中捕获某些信号,然后子进程收到后自己退出
注意:最好是在子进程退出时,父进程要等待所有子进程退出