0

我有交流问题,任何人都可以帮助我。我用 c 语言编写了一个进程创建代码,它使用 pid & fork() 调用。fork 调用现在用于制作子进程,任何人都可以告诉我如何制作父进程吗?我知道在进程中创建一个子进程会自动使进程成为父进程,但我想从一开始就创建一个父进程,所以任何人都可以告诉我如何做到这一点,其次我只是创建了我不知道如何使用的进程它我不能分配任何工作(计算)给它。所以任何人都可以告诉我如何使用这个过程来工作吗?

第三个我想为我的流程命名我该怎么做以及如何控制它们的执行?如果有人能启发我,请帮助我理解这一切。我将为此永远感谢您提前感谢

4

5 回答 5

4

fork 调用创建了一个与现有进程相同的新进程,除了一些小的差异,例如它的 pid、父 pid。原始进程从完全相同的位置进行,这父进程。这意味着你的问题基本上没有意义。您不创建父进程,原始进程一旦创建子进程就会成为父进程。

这有点像问“我通过怀孕生子创造了一个孩子,但我如何创造父母?” 你自动成为父母。

回到电脑...

当你 fork 时,系统调用将子进程的 pid 返回给父进程,将 0 返回给子进程,所以你应该有如下代码:

int pid = fork();
if (pid == 0)
{
    // in child, do child processing - normally exec an executable
}
else if (pid > 0)
{
    // in parent, do some processing - often wait for child to complete
}
else
{
    // fork failed -  handle the error
}
于 2010-08-19T11:13:06.920 回答
1

当你 fork 一个进程时,一个进程变成了两个进程。每个人都在完全相同的地方继续运行。唯一不同的是fork将子进程的PID返回给父进程,将值0返回给子进程。

没有任何帮助,子进程不知道它的父进程。如果两个进程需要相互通信,那么它们将需要使用某种 IPC 机制。

IPC 的一种常见形式是管道。如果一个人在分叉之前打开管道,那么孩子和父母都会保留打开的文件描述符。这将允许两个进程相互通信。如果需要,父进程现在可以自由地将其 PID 传递给子进程。

于 2010-08-19T09:43:46.233 回答
0
  1. 要创建父进程,请使用创建子进程的代码并颠倒父进程和子进程的角色。Presto change-o,新进程是父进程,旧进程是子进程。

  2. 对于进程之间的通信,使用一个pipe(2)或多个。此外,还有共享内存

  3. 要控制执行,请使用kill(2)wait(2)。我不确定分配名称,我们可能需要知道您在哪个平台上。

于 2010-08-19T09:43:43.117 回答
0
Secondly i just create the process i don't know how to use it i cant assign any 
work(computation) to it

您需要成对使用 fork 和 exec 使其运行您要执行的程序。这是wiki 链接以获取更多信息。

Fork-exec is a commonly used technique in Unix whereby an executing process spawns a new program. fork() is the name of the system call that the parent process uses to "divide" itself ("fork") into two identical processes. After calling fork(), the created child process is actually an exact copy of the parent - which would probably be of limited use - so it replaces itself with another process using the system call exec().

于 2010-08-19T10:30:52.050 回答
0

About renaming (I assume you mean the name displayed by ps), to "rename" a process, just copy your new name into argv[0]

于 2010-08-19T11:37:33.653 回答