linux下进程,线程创建初探

       内核将进程的列表存放在任务队列(task list)的双向链表中,链表中结点类型为 task_struct,我们称之为进程描述符,此结构中包含的数据可以完整的描述一个进程。内核通过类型为pid_t(int)类型的PID来唯一标识一个进程。

      linux是类UNIX操作系统,其创建线程有一定的独特性。linux系统并未提供产生进程的机制,它的实现与众不同,实现过程总的来说主要有两个步骤;fork,exec。fork通过拷贝当前进程产生一个子进程,exec通过读取可执行文件并载入地址空间开始运行。目前fork采用写时复制拷贝机制,只有子进程进行写入操作时才进行拷贝,拷贝完成后父子进程拥有,否则子进程与父进程完全共享同一个拷贝。

     线程技术是现代编程的一种抽象性概念,该机制提供了同一程序内共享地址空间运行的一组线程。线程机制支持并发机制,这保证了它在多处理器上实现真正的并行运行。linux线程实现机制非常独特,在linux内核概念中是没有线程这个概念的,linux将线程都当做进程来实现。在linux中线程仅仅被视作可以和其他进程共享资源的进程,每个线程都拥有其自己的task_struct。上述机制与window以及sun solaris操作系统有很大区别,这些系统都提供了专门支持线程的机制。

    线程创建与普通的进程创建过程并没有太大的区别,唯一的区别是传递一些参数保证资源的共享。

    关于进程的销毁,首先先调用exit(),调用后和进程相关联的资源都被释放掉了。此时进程已经不能运行,但是依旧保留了进程描述符,也就是说进程的结束时所需的清理工作和进程描述符的删除是分开进行的,wait()挂起调用其的进程并等待子进程的退出,之后完成垃圾回收,删除进程描述符,至此进程描述符以及进程独享的资源完全释放。

猜你喜欢

转载自blog.csdn.net/swj9099/article/details/81633608