c语言问题

c语言问题,c,multithreading,fork,exuberant-ctags,C,Multithreading,Fork,Exuberant Ctags,我有个c问题,有人能帮我吗。我用c语言编写了一个进程创建代码,它使用pid&fork()调用。fork调用现在用于生成子进程。有人能告诉我如何生成父进程吗?我知道在进程中创建子进程会使进程自动成为父进程,但我想从一开始就创建一个父进程,所以任何人都可以告诉我如何做到这一点, 第二,我只是创建了一个过程,我不知道如何使用它,我不能为它分配任何工作(计算)。那么有人能告诉我如何使用这个过程进行工作吗 第三,我想给我的流程起个名字,我该怎么做,我该怎么控制它们的执行? 如果有人能启发我,请帮助我理解这

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

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

  • 要创建父进程,请使用创建子进程的代码,并反转父进程和子进程的角色。Presto change-o,新流程是父流程,旧流程是子流程

  • 对于进程之间的通信,请使用一个或多个。还有,

  • 控制执行、使用和维护。我不确定是否指定名称,我们可能需要知道您在哪个平台上

  • 要创建父进程,请使用创建子进程的代码,并反转父进程和子进程的角色。Presto change-o,新流程是父流程,旧流程是子流程

  • 对于进程之间的通信,请使用一个或多个。还有,

  • 控制执行、使用和维护。我不确定是否指定名称,我们可能需要知道您在哪个平台上


  • 当您分叉一个进程时,一个进程将变成两个进程。每辆车都在同一个地方继续行驶。唯一的区别是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
    显示的名称),要“重命名”进程