回 帖 发 新 帖 刷新版面

主题:[讨论]请大家帮我解释一个简单的linux程序

下面这个程序我不太懂意思啊。。。请帮我加下注释好吗?

谢谢大家洛。。

#include <stdio.h>
#define DELAY 2
main()
{
 int newpid;
 void child_code();
 void parent_code( );

 printf(“Before: my pid is %d\n” , getpid());
 if((newpid = fork()) == -1)
 printf(“ fork failed!!!!”);
 else if (newpid ==0)
       child_code(DELAY);
     else 
       parent_code(newpid);
}

viod child_code(int delay)
{
  printf(“child %d here will sleep for %d seconds\n, getpid(),delay);
  printf(“child done .About to exit\n”);
  exit(17);
}

void parent_code(int childpid)
{
int wait_rv = 12345;
wait_rv = wait(NULL);
printf(“waiting for %d. Wait returned:%d\n”, childpid , wait_rv);
}

回复列表 (共3个回复)

沙发

#include <stdio.h>
#define DELAY 2
main()
{
 int newpid;
 void child_code();
 void parent_code( );

 printf(“Before: my pid is %d\n” , getpid());
/******************************************************

#include <unistd.h>
pid_t fork(void);
Returns: 0 in child, process ID of child in parent, -1 on error
 
******************************************************/
 if((newpid = fork()) == -1)//出错
 printf(“ fork failed!!!!”);
 else if (newpid ==0)//子进程
       child_code(DELAY);
     else 
       parent_code(newpid);//原来的进程(父进程)
}

viod child_code(int delay)
{
  printf(“child %d here will sleep for %d seconds\n, getpid(),delay);
  printf(“child done .About to exit\n”);
  exit(17);
}

void parent_code(int childpid)
{
int wait_rv = 12345;
wait_rv = wait(NULL);
printf(“waiting for %d. Wait returned:%d\n”, childpid , wait_rv);
}


/*********************************************************
The new process created by fork is called the child process. This function is called once but returns twice. The only difference in the returns is that the return value in the child is 0, whereas the return value in the parent is the process ID of the new child. The reason the child's process ID is returned to the parent is that a process can have more than one child, and there is no function that allows a process to obtain the process IDs of its children. The reason fork returns 0 to the child is that a process can have only a single parent, and the child can always call getppid to obtain the process ID of its parent. (Process ID 0 is reserved for use by the kernel, so it's not possible for 0 to be the process ID of a child.)

Both the child and the parent continue executing with the instruction that follows the call to fork. The child is a copy of the parent. For example, the child gets a copy of the parent's data space, heap, and stack. Note that this is a copy for the child; the parent and the child do not share these portions of memory. The parent and the child share the text segment 

*********************************************************/

板凳

谢谢楼上得高手解答哈。。但是可不可以个我解释下这一段啊?
void parent_code(int childpid)
{
int wait_rv = 12345;
wait_rv = wait(NULL);
printf(“waiting for %d. Wait returned:%d\n”, childpid , wait_rv);
}

3 楼

遇到一个函数不懂你就man一下贝
比如这里,你可以man 2 wait看看wait的用法阿

这里就是等待子进程结束贝

我来回复

您尚未登录,请登录后再回复。点此登录或注册