Linux进程和线程(草稿)

来源:互联网 发布:java缓存技术怎么实现 编辑:程序博客网 时间:2024/04/28 16:51

 1. Linux内核只支持进程,线程是通过轻量级进程clone系统调用实现的,POSIX基于clone实现的pthread库提供了线程调用的相关接口。

比较难理解的是,exec执行后,程序的代码段已经彻底被换了,所以进程执行的代码已经不是调用exec那段源代码了。

考虑到父子进程的同步性,以及更好的控制执行流程,一般,需要用父进程调用wait等待子经常结束并读状态,是其不能成为僵尸进程。

2.信号用于向一个进程通知一个事件的发生,所有的信号都定义在signal.h中,在每个中断处理程序中都会调用do_signal()用于信号处理,任何一个中断处理程序都会在结束之前调用do_signal,该函数实现了将信号处理函数的地址压入用户堆栈中,使得中断返回后信号处理程序能立即得到执行,系统至少10ms就要执行一次时钟中断,所以当前进程能很快的处理信号。信号产生、信号传递、在产生和传递的时间差称为未决状态,设置信号处理函数称为信号的部署,信号只有被解除阻塞后,才能被传递。

使用Kill向别的进程发信号、alarm在进程定义定时器,到达时间后收到SIGALARM消息,pause挂起进程直至收到任意一条消息,通过sigprocmask设置消息屏蔽码,屏蔽哪些消息;sigaction设置信号传递函数、sigpending检查进程有哪些未决信号。

lpthread线程库:pthread_create、pthread_exit、pthread_join挂起当前线程,知道等待的线程结束,如果线程设置为可以取消的话,可以通过pthread_cancle去取消。线程的同步操作通过定义mutex实现,主要有pthread_mutex_trylock、pthread_mutex_lock、pthread_mutex_unlock实现同步和互斥,用于保护共享的数据。