线程与进程

进程是操作系统分配资源的基本单位,线程是cpu调度的最小单位

线程

多线程中join方法:
把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

多线程中detach方法:
当使用detach()函数时,主调线程继续运行,被调线程驻留后台运行,主调线程无法再取得该被调线程的控制权。当主调线程结束时,由运行时库负责清理与被调线程相关的资源。

一般情况下主线程退出导致整个进程退出,所有子线程都会结束

进程

僵尸进程
在Linux系统中,任何一个子进程在调用exit()函数结束运行后,内核会释放该进程的所有资源,包括占用的内存和打开的文件等。
同时,也会留下一个叫做僵尸进程(Zombie)的数据结构,Zombie中存储了该进程的进程号、退出码、退出状态、使用的CPU时间等信息。即僵尸进程是早已死亡的子进程,但在进程表中占了一个位置(slot)。
子进程还会向父进程发送SIGCHLD信号,父进程调用wait()或者waitpid()函数可以将僵尸进程释放(为它收尸)。
父进程在没有释放掉僵尸进程就提前结束了,僵尸进程则会由init进程接管。init进程(PID = 1)会作为它的父进程,为它收尸。
但是如果父进程是一个循环,不会结束,却又没有为SIGCHLD信号绑定处理函数,或者没有调用wait()/waitpid()函数为僵尸进程收尸,则该僵尸进程会一直在系统中存在。

如果系统中存在很多僵尸进程,进程号会被它们一直占用。
这时,有限的进程号将会耗尽,使得系统无法创建新的进程。

如何杀死僵尸进程
Linux中的top命令可以实时显式系统中各个进程的资源占用情况。因此,可以先通过top命令查看系统中是否存在僵尸进程。
输入top命令后的部分内容如下:其中zombie前面的数字表示当前系统中存在的僵尸进程数。

状态为Z,后面有defunct标记的进程就是僵尸进程。
可以通过ps -ef | grep defunct命令查看具体的僵尸进程
上述命令返回的结果中,第三列就是该僵尸进程的父进程,可以通过kill -9 PPID杀死其父进程。之后,僵尸进程将由init进程接手,会被init进程释放。

孤儿进程
父进程退出,而它的一个或多个子进程还在运行,这些子进程将成为孤儿进程(orphan process)。
估计进程将会被init进程收养,并由init进程完成对它们的状态收集工作。
由于孤儿进程会被init进程收养,因此孤儿进程调用exit()结束运行时,也会由init进程完成回收工作,而不会对系统造成危害。

孤儿进程与僵尸进程的区别:
孤儿进程: 子进程未运行结束,父进程却提前计数,这时子进程将会成为孤儿进程被init进程收养。init进程会完成对孤儿进程的回收工作,孤儿进程对系统没有危害。
僵尸进程: 子进程运行结束,父进程没有为SIGCHLD信号设置处理函数,或者调用wait()/waitpid()函数对其进程回收,成为系统中的僵尸进程。僵尸进程会占用系统中有限的进程号,导致系统无法创建新进程。因此,僵尸进程对系统有危害。

守护进程(Daemon)
Linux Daemon(守护进程)是运行在后台的一种特殊进程,独立于控制终端,并且周期性的执行某种任务或者等待处理某些发生的事件。
守护进程不需要用户输入就能运行,它可以提供某种服务。并且不是对系统提供服务,就是对某个应用程序提供服务。
Linux中大多数的服务器就是通过守护进程实现,如系统日志进程syslogd、数据库服务器mysqld、web服务器httpd等。
守护进程一般在系统启动时就开启了,除非强制终止,否则直到系统关机都保持运行。
因为需要使用特殊端口1~1024访问某些特殊的资源,守护进程经常以超级用户(root)权限运行。
守护进程的父进程是init进程: 创建守护进程时,父进程在fork出子进程后就提前结束运行了。守护进程将会变成孤儿进程,由init进程收养。
守护进程是非交互式程序,没有控制终端,无论是标准输出设备stdout还是标准出错设备stderr的输出都需要进行特殊处理。
守护进程的名称通常以d结尾,如sshd、xinetd、crond等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值