相关疑难解决方法(0)

为什么默认的进程创建机制是fork?

用于进程创建的 UNIX 系统调用 fork() 通过复制父进程来创建子进程。我的理解是,这之后几乎总是调用 exec() 来替换子进程的内存空间(包括文本段)。在 fork() 中复制父级的内存空间对我来说总是很浪费(尽管我意识到可以通过使内存段在写时复制从而只复制指针来最小化浪费)。无论如何,有谁知道为什么流程创建需要这种复制方法?

process process-management fork

51
推荐指数
2
解决办法
6227
查看次数

当我们在 shell 上输入一个简单的命令时会发生什么?

我有一个关于执行简单命令的简单问题。根据我的理解,当我们ls在交互式 shell 中键入命令时,

  1. Shell 解释命令。
  2. Shell 创建子进程并在子进程上执行命令。
  3. Shell 等待子进程完成。

如果我的理解是正确的,我们在 shell 提示符下键入的一个简单命令会在子进程上执行,并且该命令的结果不会影响当前 shell 的环境。

如果是这样,那么内置命令cd呢?如果cd在子进程上执行并且不能影响当前shell的环境,那么如何更改当前shell的工作目录?

shell process subshell

38
推荐指数
2
解决办法
2万
查看次数

fork 和 exec 是如何工作的?

我没有太多经验,只是试图参与他们如何从用户级别解释到硬件的过程。

因此,当从 shell 触发命令时,fork()继承它exec()的子进程并将子进程加载到内存中并执行。

  1. 如果子进程包含了父进程(也就是原始进程)的所有属性,那么这个子进程需要什么?原始进程也可能已加载到内存中。
  2. 这个forkexec概念是否适用于 UNIX 中的所有可执行程序?也喜欢shell脚本还是只喜欢命令?它是否也适用于 shell 内置命令?
  3. 如果我将执行命令/脚本,何时使用复制概念?

很抱歉一次问了很多问题,但是当我想到任何命令执行时,所有这些问题都会立刻浮现在我的脑海中。

fork exec

17
推荐指数
3
解决办法
2万
查看次数

为什么有些程序会立即返回 shell 而有些程序直到执行完成才返回?

我从现代操作系统一书中读到,当一个命令运行时,shell 创建一个子进程,等待它直到子进程完成执行,然后等待来自用户的另一个命令。对于像gedit. 终端在我关闭之前不会接受命令gedit。但是,当我打开atom代码编辑器时,shell 立即返回,即使编辑器正在运行,也准备好接受下一个命令。关闭终端不会关闭原子。这是否意味着编辑器不是作为子进程打开的?使这成为可能的潜在机制是什么?

跑步ps au | grep atom给予

<username>      8042  0.0  0.0  15944  2264 pts/1    S+   00:55   0:00 grep --color=auto atom
Run Code Online (Sandbox Code Playgroud)

shell process background-process

14
推荐指数
1
解决办法
1253
查看次数