进程和普通函数调用的区别?

问题描述 投票:0回答:1

我是刚刚接触到进程这个概念的。

书上对进程的定义是 "正在运行的程序的一个实例"。

  1. 我还是有点不明白这是什么意思。在我看来,进程就是一个程序正在运行的特定指令?还是说不是?

  2. 函数调用和进程的区别是什么?比如说,我们有一个叫做main的函数,在这个函数中我们调用了printf函数。printf算不算一个独立的进程?为什么不算呢?

  3. 什么是子进程与父进程?我知道创建子进程的一种方法是调用fork()。然后根据fork返回的整数值,我们可以在子进程与父进程中。但是除此之外有没有什么东西可以让某件事情成为父进程与子进程?

  4. 另外根据问题2的回答,printf会不会算作子进程?

process operating-system fork parent-child
1个回答
1
投票

严格的说,linux的进程就是书中提到的程序的 "实例"。这意味着它们包含了你的程序需要 "执行 "的信息。

  1. 进程并不是指程序正在运行的指令,而是指整个正在运行的程序。你所说的程序我假设是你编写的代码,但这只是进程的一个方面。还有其他各种属性,比如堆内存空间、堆内存空间和进程ID等,所有这些细节都存储在一个叫做进程控制块(PCB)的数据基础设施中。假设你有一个编译版的代码 "Fibonacci.c",叫做fibonacci,如果你从两个不同的终端运行它,就会产生同一个程序的 "两个进程"。

  2. 函数调用是发生在一个进程内部的事情。printf会发生在同一个函数中。它不算是一个独立的进程,因为它是在同一个实体内部执行的。

  3. fork可以创建子进程。作为一个经验法则,我认为任何在我们当前进程内部创建的进程都是一个子进程。尽管这可能不是一个严格的定义。fork所做的是复制当前进程,这意味着它通过创建一个新的PCB来创建一个新的条目。它和调用fork的进程有相同的代码段,但它会有自己的内存空间和进程ID等。我不会深究fork发生时如何处理内存,但你可以在man页中阅读更多的信息。

  4. printf也不是一个子进程。它驻留在当前进程本身。

© www.soinside.com 2019 - 2024. All rights reserved.