我查看了函数(),试图了解fork()如何返回父进程的子PID和子进程的0。
我认为nr包含子进程的PID (将返回给调用进程),但我看不出它如何能够将0返回到子进程。
答案说,返回值是在为新进程创建的堆栈上传递的,但是(除了并不真正理解它)我在代码中找不到这个值。
因此,,其中为子进程?设置了0的返回值。
_do_fork()函数的代码复制如下:
long _do_fork(unsigned long clone_flags,
unsigned long stack_start,
unsigned long stack_size,
我想用vfork()写一个程序,并且parent创建n个子对象,我想用参数插入一些子对象。然后我想把儿子的数量加起来,例如:
./sum 4
The sum of the child: 10
The sum of the parent: 10
(1+2+3+4)
这是我想出来的一小段代码,但是我得到了无限循环。
int n = atoi(argv[1]);
int i = 1;
pid_t pid;
int sumchild = 0;
int sumparent = 0;
while(i <= n){
pid = vfork();
if(pid
我正在尝试理解下面这段代码
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
pid_t pid ;
unsigned int i=0;
pid=vfork();
switch(pid)
{
case -1: // some sort of error
puts("fork error");
break;
case 0: // the child process
while(i<
#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
int turn;
int flag[2];
int main(void)
{
int pid,parent=1;
printf("before vfork\n");
if((pid=vfork())<0)
{
perror("vfork error\n");
return 1;
在下面的程序中,我得到了分段错误。为什么?以及如何解决这个问题?
#include <stdio.h>
main()
{
int pid;
printf("I'm the original process with PID %d and PPID %d.\n", getpid(),getppid());
pid=vfork();
if (pid!=0)
{
printf("I'm the parent process with PID %d and PPID %d.\n",ge
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int createproc();
pid_t pid;
int main()
{
createproc();
printf("%d\n", pid);
exit(0);//_exit(0) gives the same result
}
int createproc()
{
if(!(pid=vfork())) {
p