我有一个问题,任何人都可以帮助我。我用c语言编写了一个流程创建代码,它使用了pid& fork()调用。 fork调用是用于制作子进程现在可以任何正文告诉我如何进行父进程吗?我知道在进程中创建一个子进程会使进程自动生成父进程,但我想从一开始就创建一个父进程,所以任何人都可以告诉我如何执行此操作, 其次我只是创建了一个我不知道如何使用它的过程我无法为它分配任何工作(计算)。那么任何人都可以告诉我如何使用该过程进行工作吗?
第三个我想给我的过程命名,我该怎么办呢?我怎么能控制他们的执行? 如果有人能开导我,请帮助我理解这一切。 我将永远感谢这一切 提前谢谢
答案 0 :(得分:4)
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
}
答案 1 :(得分:1)
当您分叉流程时,一个流程变为两个流程。每个都继续在完全相同的地方运行。唯一的区别是fork将子进程的PID返回给父进程,并将值0返回给子进程。
没有任何帮助,子进程不知道它的父进程。如果这两个进程需要相互通信,那么他们将需要使用某种IPC机制。
IPC的常见形式是管道。如果在分叉之前打开管道,则子节点和父节点都保持打开的文件描述符。这将允许两个进程彼此通信。如果需要,父级现在可以自由地将其PID传递给子进程。
答案 2 :(得分:0)
要创建父进程,请使用代码创建子进程并反转父进程和子进程的角色。 Presto change-o,新进程是父进程,旧进程是子进程。
对于流程之间的通信,请使用pipe(2)
或几个。此外,还有shared memory。
答案 3 :(得分: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 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().
答案 4 :(得分:0)
关于重命名(我假设您的意思是ps
显示的名称),要“重命名”某个流程,只需将您的新名称复制到argv[0]