我有个问题,谁能帮我一下?我用c语言写了一个创建进程的代码,它使用pid & fork()调用。fork调用现在用于生成子进程,谁能告诉我如何生成父进程?我知道在进程中创建子进程会使进程自动成为父进程,但我想从一开始就创建一个父进程,所以有人能告诉我如何做到这一点吗?其次,我只是创建了一个进程,我不知道如何使用它,我不能将任何工作(计算)分配给it.so。有人能告诉我如何使用该进程进行工作吗?
第三,我想给我的进程命名,我该怎么做&我该如何控制它们的执行?如果有人能开导我,请帮我理解这一切。对此我将永远感激不尽,谢谢
发布于 2010-08-19 18:30:52
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 link。
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-19 19:13:07
fork调用创建了一个与现有进程相同的新进程,除了一些细微的差异,比如它的pid、父pid。原始进程从完全相同的位置进行,这就是父进程。这意味着你的问题基本上是没有意义的。您不会创建父流程,一旦创建子流程,原始流程就会成为父流程。
这有点像问“我通过怀孕和分娩创造了一个孩子,但我如何创造父母呢?”您将自动成为家长。
回到电脑...
当您派生时,系统调用将子进程的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-19 17:43:46
当您派生一个进程时,一个进程变成了两个进程。每一个都继续在完全相同的位置运行。唯一的区别是fork将子进程的PID返回子进程,并将值0返回子进程。
如果没有任何帮助,子进程不知道它的父进程。如果这两个进程需要相互通信,那么它们将需要使用某种IPC机制。
IPC的一种常见形式是管道。如果在派生之前打开管道,那么子进程和父进程都会保留打开的文件描述符。这将允许两个进程相互通信。如果需要,父进程现在可以自由地将其PID传递给子进程。
https://stackoverflow.com/questions/3520402
复制相似问题