c语言问题
我有个c问题,有人能帮我吗。我用c语言编写了一个进程创建代码,它使用pid&fork()调用。fork调用现在用于生成子进程。有人能告诉我如何生成父进程吗?我知道在进程中创建子进程会使进程自动成为父进程,但我想从一开始就创建一个父进程,所以任何人都可以告诉我如何做到这一点, 第二,我只是创建了一个过程,我不知道如何使用它,我不能为它分配任何工作(计算)。那么有人能告诉我如何使用这个过程进行工作吗 第三,我想给我的流程起个名字,我该怎么做,我该怎么控制它们的执行? 如果有人能启发我,请帮助我理解这一切。 我将永远为此感谢你 提前谢谢c语言问题,c,multithreading,fork,exuberant-ctags,C,Multithreading,Fork,Exuberant Ctags,我有个c问题,有人能帮我吗。我用c语言编写了一个进程创建代码,它使用pid&fork()调用。fork调用现在用于生成子进程。有人能告诉我如何生成父进程吗?我知道在进程中创建子进程会使进程自动成为父进程,但我想从一开始就创建一个父进程,所以任何人都可以告诉我如何做到这一点, 第二,我只是创建了一个过程,我不知道如何使用它,我不能为它分配任何工作(计算)。那么有人能告诉我如何使用这个过程进行工作吗 第三,我想给我的流程起个名字,我该怎么做,我该怎么控制它们的执行? 如果有人能启发我,请帮助我理解这
当您分叉一个进程时,一个进程将变成两个进程。每辆车都在同一个地方继续行驶。唯一的区别是fork将子进程的PID返回给父进程,并将值0返回给子进程 如果没有任何帮助,子进程就不知道它的父进程。如果这两个进程需要相互通信,那么它们将需要使用某种IPC机制
IPC的一种常见形式是管道。如果在分叉之前打开管道,那么子级和父级都会保留打开的文件描述符。这将允许两个进程相互通信。如果需要,父进程现在可以自由地将其PID传递给子进程。当您分叉一个进程时,一个进程变成两个进程。每辆车都在同一个地方继续行驶。唯一的区别是fork将子进程的PID返回给父进程,并将值0返回给子进程
Secondly i just create the process i don't know how to use it i cant assign any
work(computation) to it
如果没有任何帮助,子进程就不知道它的父进程。如果这两个进程需要相互通信,那么它们将需要使用某种IPC机制
IPC的一种常见形式是管道。如果在分叉之前打开管道,那么子级和父级都会保留打开的文件描述符。这将允许两个进程相互通信。如果需要,父进程现在可以自由地将其PID传递给子进程
Secondly i just create the process i don't know how to use it i cant assign any
work(computation) to it
您需要成对使用fork和exec,使其运行您想要执行的程序。
以下是有关更多信息的详细信息
Fork-exec是Unix中常用的一种技术,通过它,执行进程生成一个新程序。fork()是父进程用来将自身(“fork”)划分为两个相同进程的系统调用的名称。调用fork()后,所创建的子进程实际上是父进程的精确副本(可能使用有限),因此它将自己替换为使用系统调用exec()的另一个进程。
您需要成对使用fork和exec,使其运行您想要执行的程序。
以下是有关更多信息的详细信息
Fork-exec是Unix中常用的一种技术,通过它,执行进程生成一个新程序。fork()是父进程用来将自身(“fork”)划分为两个相同进程的系统调用的名称。调用fork()后,所创建的子进程实际上是父进程的精确副本(可能用途有限),因此它使用系统调用exec()将自己替换为另一个进程。
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
}
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
}
关于重命名(我假设您指的是ps
显示的名称),要“重命名”进程,只需将新名称复制到argv[0]
关于重命名(我假设您指的是ps
显示的名称),要“重命名”进程