linux下多进程或者多线程编程的问题。新手,望指教!

author author     2023-03-16     298

关键词:

c程序: 假如main函数一直执行,到中间,用fork创建多个进程,或者用其他方法创建多个线程,而线程是无线循环的,那么main函数还好在创建这些线程或者进程之后继续执行吗?还是停止在那个创建语句上?然后,main函数如果继续执行的话,那么他执行完毕,会退出整个程序,乃至所有由他产生的线程或者进程都关闭吗??
请热心的朋友们详细点解答一下,谢谢大家!~

第一个问题,不管是创建进程或者创建线程都不会阻塞,创建完毕马上返回不会等待子进程或者子线程的运行
第二个问题
首先进程和线程是不一样的
多进程时,父进程如果先结束,那么子进程会被init进程接收成为init进程的子进程,接下来子进程接着运行,直到结束,init进程负责取得这些子进程的结束状态并释放进程资源。而如果是子进程先结束,那么父进程应当用wait或者waitpid去获取子进程的结束状态并释放进程资源,否则子进程会成为僵死进程,它占用的进程资源不会释放
多线程时,如果父线程或者说你讲的main结束时使用return或者exit或者处理完毕结束,那么整个进程都结束,其他子线程自然结束。如果main结束时使用的是pthread_exit那么只有父线程结束,子线程还在运行。同样对于子线程结束时如果调用了exit,那么整个进程包括父线程结束,如果调用了pthread_exit或者正常结束,那么只有子线程结束。
另外子线程结束时如果没有分离属性,其他线程应当使用pthread_join去获取线程结束状态并释放线程资源,如同进程里的wait和waitpid
参考技术A 你好,多进程或多线程,都不会阻塞当前语句代码。为了您的理解,我就大胆举下面两个例子:
多进程:你可以看成是本来是一条路的,现在从中间拆成两条,然后每一条路都有属于自己这条路的代码在运行。
多线程:你可以看成是一条路,然后分出车道,比如左车道和右车道甚至是停车道,然后每条车道都单独通车,其他车道的不能对这条车道进行干扰。

所以,把一条路从中间拆成两条,成本是很高的。但是把一条路分车道,成本就不是很高了。
对于您提出的main函数的疑问,当main函数最后执行完毕,程序退出后,所有的进程包括线程,都会被关闭的,哪怕你的程序中没有关闭,操作系统也会帮你关闭的,现在的操作系统都非常的完善了。当然,也存在有线程或进程不被释放的特殊情况,最好在编程中要记得释放。

linux系统编程多线程(代码片段)

...级线程号)与tgid(线程组id)进程与线程概念解释同一所属组下多线程之间共享与独立的空间进程与线程的对比多进程与多线程对比线程控制线程的创建线程终止线程等待线程分离线程安全线程互斥:锁的本质加锁的时机加锁的... 查看详情

linux系统编程多线程(代码片段)

...级线程号)与tgid(线程组id)进程与线程概念解释同一所属组下多线程之间共享与独立的空间进程与线程的对比多进程与多线程对比线程控制线程的创建线程终止线程等待线程分离线程安全线程互斥:锁的本质加锁的时机加锁的... 查看详情

linux下多线程的操作(代码片段)

线程定义**定义:**线程是轻量级的进程(LWP:lightweightpocess),在Linux环境下线程的本质仍然是进程。在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。操作系统会以... 查看详情

Linux下多线程服务器的执行模式

】Linux下多线程服务器的执行模式【英文标题】:ExecutionPatterofMulti-ThreadedServeronLinux【发布时间】:2021-06-2123:21:34【问题描述】:我想知道在高性能服务器的请求-响应周期中实现TCP的服务器多线程的执行模式应该是什么(例如使... 查看详情

linux多线程和多进程的区别(代码片段)

一.为何需要多进程(或者多线程),为何需要并发?这个问题或许本身都不是个问题。但是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的魅力以及必要性。我想,只要你不是整天都... 查看详情

麻烦解释一下linux下进程和线程有啥区别和联系,linux下多线程和多进程通信的实现方法,请通俗解释

如果采纳你的答案,可以在加100分兄弟看到你这么高的分我就找了些资料:也算是对昨天学的知识总结一下吧一、先说概念不管是windows还是linux下的进程和线程概念都是一样的,只是管理进程和线程的方式不一样,这个是前提,... 查看详情

在windows下多进程的实现?

参考技术A通过多进程来实现,用这两个命令:调用格式:〈逻辑型〉启动线程(子程序指针欲执行的子程序,[整数型参数数据],[整数型变量线程句柄])-多线程支持库->多线程控制英文名称:CreateThread创建并启动一条... 查看详情

多线程基础

...了高洪岩的《Java多线程编程核心技术》一书,打算记录下多线程的基础知识点,也算对本书的一个读后感了。目前打算分四五篇博文进行记录。第一篇主要是记录线程的概念,创建,常用的基础方法等。1.什么是线程?通常我们... 查看详情

进程线程多进程多线程的优缺点

一.在Linux下编程多用多进程编程少用多线程编程IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的criticalsection和linux的pthread_mutex),windows比linux的要快五倍左... 查看详情

python核心编程总结(五多任务编程之进程与线程)(代码片段)

✍、脑图时刻五、多任务编程之进程与线程✍、脑图时刻1、多任务编程1.1、多任务的概念1.2、多任务的执行方式1.3、进程1.4、多进程的使用1.4.1、获取进程编号1、获取当前进程编号2、获取当前父进程编号3、小结1.4.2、进程执行... 查看详情

python核心编程总结(五多任务编程之进程与线程)(代码片段)

✍、脑图时刻五、多任务编程之进程与线程✍、脑图时刻1、多任务编程1.1、多任务的概念1.2、多任务的执行方式1.3、进程1.4、多进程的使用1.4.1、获取进程编号1、获取当前进程编号2、获取当前父进程编号3、小结1.4.2、进程执行... 查看详情

python之多任务编程进程和线程的对比

1.进程和线程的对比的三个方向关系对比区别对比优缺点对比2.关系对比线程是依附在进程里面的,没有进程就没有线程。一个进程默认提供一条线程,进程可以创建多个线程。3.区别对比进程之间不共享全局变量线程之间共享全... 查看详情

linux多线程编程与同步实例(基于条件变量)(代码片段)

...)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。C语言编程中,基于PO... 查看详情

[linux]多进程网络编程监听一个端口(代码片段)

SO_REUSEPORT支持多个进程或者线程绑定到同一端口每个进程可以自己创建socket、bind、listen、accept相同的地址和端口,各自是独立平等的。让多进程监听同一个端口,各个进程中acceptsocketfd不一样,有新连接建立时,内核只会唤醒一... 查看详情

python进阶多任务编程(超详细)(代码片段)

Python多任务编程1.多任务的介绍2.进程3.多进程的使用4.获取进程编号5.进程执行带有参数的任务6.进程的注意点7.线程8.多线程的使用9.线程执行带有参数的任务10.线程的注意点11.互斥锁12.死锁13.进程和线程的对比1.多任务的介绍1.... 查看详情

linux多线程编程

...:http://www.cnblogs.com/skynet/前言线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍... 查看详情

c++网络编程tcp/iplinux下多进程socket通信多个客户端与单个服务端交互代码实现回声服务器(代码片段)

 原文作者:aircraft原文链接:https://www.cnblogs.com/DOMLX/p/9612820.html  LINUX下: 一.服务端代码 下面用了多个close来关闭文件描述符,可能有的小伙伴会有疑惑。。。。我就说一句,创建进程的时候会把父进程的资源... 查看详情

进程和线程及linux下的编程

一、概述  进程和线程网络上有一堆解释,我不喜欢抄袭,也不喜欢套用太教科书的说法。就以我自己的理解来说说进程和线程吧,当然自己的理解肯定不是很严谨,但是理解起来应该会比教科书快一点。进程和线程都可以认... 查看详情