关于进程和线程的疑惑

发布于 2022-09-11 16:11:41 字数 306 浏览 38 评论 0

我的疑惑以判断题形式来问吧。

  1. 若一个进程创建一个线程后,这个线程正常无限运行下去(假设如此)。突然这个进程由于异常退出,则这个线程也会消失,不会存在于系统后台,windows和linux平台都是如此。
  2. 若一个进程创建一个线程A,而A里又创建线程B,创建完后,A退出结束,B依旧无限运行下去(假设如此)。突然这个进程又由于异常退出,则线程B也会消失,也不会存在于系统后台,windows和linux平台都是如此。

若不对,希望能说下理由,先行谢过各位老哥。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

匿名的好友 2022-09-18 16:11:41

Windows上
前台线程终止后,程序结束,并且后台线程被终结。
进程会等待所有的前台线程完成后再结束工作,但是如果只剩下后台线程,则会直接结束工作。

樱花坊 2022-09-18 16:11:41

先说多线程的情况:线程是依托于进程的,如果进程结束了,该进程内的所有线程都会结束。可以理解为每个进程至少会有一个线程:主线程。主线程所创建出来的线程,都依托于该进程。也就是说,不可能有脱离进程而独立运行的线程存在。

再说多进程的情况:Unix/Linux环境下,有三种情况:

  1. 主进程在结束前,要通过wait系统调用,等待其子进程的结束,同时回收其资源。
  2. 如果主进程没有这样做,而是不管不顾地自己结束了,那么它的子进程就都会变成孤儿进程,会被0号进程(init)接管。init会负责回收子进程的资源。
  3. 如果主进程是一个守护进程(无限运行下去的),但它由不wait自己的子进程,那么每个子进程结束后,就都会残留下一点资源释(进程入口表的一个条目)放不掉,这就形成了“僵尸进程”。随着时间的推移,会有耗尽系统资源的风险。所以要尽量避免这种情况的发生。

windows环境应该也类似,不过没什么研究。

ㄖ落Θ余辉 2022-09-18 16:11:41

你可以把进程看成自己的一个脚本程序的运行,你脚本程序如果挂了,不管你开什么子进程还是线程,统统消失。如果你以为它正常退出了,而实际上ps中还能看到,说明你进程或者线程没有清理干净,使得你的主程序还活着。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文