首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言问题

C语言问题
EN

Stack Overflow用户
提问于 2010-08-19 17:29:33
回答 5查看 198关注 0票数 0

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

第三,我想给我的进程命名,我该怎么做&我该如何控制它们的执行?如果有人能开导我,请帮我理解这一切。对此我将永远感激不尽,谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-19 18:30:52

代码语言:javascript
复制
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().

票数 0
EN

Stack Overflow用户

发布于 2010-08-19 19:13:07

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

这有点像问“我通过怀孕和分娩创造了一个孩子,但我如何创造父母呢?”您将自动成为家长。

回到电脑...

当您派生时,系统调用将子进程的pid返回父进程,并将0返回子进程,因此您应该有类似如下的代码:

代码语言:javascript
复制
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
}
票数 4
EN

Stack Overflow用户

发布于 2010-08-19 17:43:46

当您派生一个进程时,一个进程变成了两个进程。每一个都继续在完全相同的位置运行。唯一的区别是fork将子进程的PID返回子进程,并将值0返回子进程。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3520402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档