main函数由哪个进程创建?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了main函数由哪个进程创建?相关的知识,希望对你有一定的参考价值。

在操作系统中,`main()` 函数是由操作系统内核(kernel)所创建的进程(process)调用的。

当我们在命令行或其他方式下运行一个可执行文件时,操作系统内核会为该执行文件创建一个新的进程,并将程序的控制权交给该进程。操作系统内核会读取该可执行文件的相关信息,包括入口地址以及程序代码和数据等资源,然后将其加载到对应的内存空间中,并设置好进程的环境变量、命令行参数等信息。最后,操作系统内核会调用程序的入口函数 `main()`,并传递相应的参数给它,从而启动程序的执行过程。

因此,可以说 `main()` 函数是程序的入口点,是操作系统内核所创建的进程的一部分。操作系统内核负责管理进程的生命周期,包括进程的创建、调度、运行、阻塞、唤醒、销毁等等。
参考技术A main函数是在进程运行时被调用的,进程是由操作系统创建的。因此,main函数是由操作系统创建的进程调用的。

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

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函数最后执行完毕,程序退出后,所有的进程包括线程,都会被关闭的,哪怕你的程序中没有关闭,操作系统也会帮你关闭的,现在的操作系统都非常的完善了。当然,也存在有线程或进程不被释放的特殊情况,最好在编程中要记得释放。

以上是关于main函数由哪个进程创建?的主要内容,如果未能解决你的问题,请参考以下文章

Linux 内核进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

linux下c语言pipe无名管道 main函数创建两个进程p1和p2,p1把一个文件名通过管道给main进程,main进程打开

从创建进程到进入main函数,发生了什么?

通过在 Visual C++ 中传递函数来创建进程

exec函数族

exec函数族