关于main函数与进程、线程退出的关系
在学习嵌入式系统的进程和线程时,有以下的疑问: 讲师说进程退出时,进程中的所有线程都会退出;但是主线程退出时,子线程是不会退出的。当时觉得主线程=主进程main函数,那主线程退出了,子线程还会继续执行呢?
在网上查阅资料之后,弄明白了三者的关系就理解了开头的两句话,下面写一下总结,方便以后复习。
理解进程与线程 进程 是系统分配资源的最小单位。 线程 是系统调度的最小单位。
线程是程序最基本的运行单位,而进程是不能运行的,运行的是进程中的线程。创建进程时,系统会自动创建一个主线程来运行进程中的数据信息。
我们运行main函数的时候,就会创建一个主进程和一个主线程,当我们在主线程中创建更多的子线程后: 调用exit()函数:主进程和主线程都退出,子线程自然也要退出。 调用pthread_exit()函数:主线程退出,但是主进程依旧存在,所以进程中的子线程可以继续运行。
在程序中使用多进程多线程时,曾经出现ctrl c强制退出程序后,仍然有线程在后台执行,要手动kill掉。是因为父进程死亡后,主进程中的线程跟随主进程一起退出了,而子进程由系统1号进程进行管理,所以子进程中的线程还可以继续运行。这就导致我在调试运行程序的时候经常会出现报错,原因是因为后台中的子进程还在运行导致的。所以在处理进程和线程时,要几时对线程和进程资源进行回收,避免出错。