Hi all,

Here is fork.c in its entirety:
#define _GNU_SOURCE
#include <sys/types.h>
#include <unistd.h>
#include <sched.h>
#include <sys/syscall.h>
#include <signal.h>

#include <stdio.h>

int main()
{
    pid_t child;

    printf("Started, pid=%d\n", getpid() );

    //child=fork();
    child=vfork();
    //child=syscall(__NR_fork);
    //child=syscall(__NR_vfork);
    //child=syscall(__NR_clone, CLONE_VFORK|SIGCHLD, 0);

    if( child<0 ) {
        perror("fork failed");

        return 1;
    }

    if( child==0 ) {
        printf("Child, pid=%d\n", getpid() );
    } else {
        printf("Parent, child=%d\n", child );

        int status;
        wait(&status);
    }

    return 0;
}
I compile it with gcc 4.3.2 from Debian Lenny with the following command line:
gcc -O0 -g -o fork fork.c

When I run it, I get:
$ ./fork
Started, pid=13711
Child, pid=13712
Parent, child=13712
Segmentation fault

The core dump is of no use whats o' ever - it shows an rip of 0. If the program is run from within strace, there is no segmentation fault. Same goes if it is being run by gdb or valgrind. In fact, I'm having a somewhat difficult time deciding whether it is the parent or the child that dumps core! (adding a printf after the "wait" confirms that the child returned with status code 0, so it must be the parent that is seg faulting).

help?

Shachar

--
Shachar Shemesh
Lingnu Open Source Consulting Ltd.
http://www.lingnu.com

_______________________________________________
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il

Reply via email to