Deutsch   English   Français   Italiano  
<vgl8h1$385vs$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder2.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Muttley@DastartdlyHQ.org
Newsgroups: comp.unix.programmer
Subject: Why does getppid() still return old parent pid after setsid()?
Date: Fri, 8 Nov 2024 14:51:13 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 27
Message-ID: <vgl8h1$385vs$1@dont-email.me>
Injection-Date: Fri, 08 Nov 2024 15:51:15 +0100 (CET)
Injection-Info: dont-email.me; posting-host="8833238c505f801787634014ea3badaf";
	logging-data="3414012"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19fHy8jfld0My10q11t5op6"
Cancel-Lock: sha1:M3oXk94EMqj8gQj2fxxVvQqEJRk=
Bytes: 1499

I've tried this code on both MacOS and Linux yet the child process getppid()
still returns its original parent process instead of "1" for init which is 
what I'd expect. Isn't setsid() supposed to completely detach the child or
have I misunderstood?

int main()
{
        printf("Parent pid %d\n",getpid());
        switch(fork())
        {
        case -1:
                perror("fork");
                return 0;
        case 0:
                // child
                break;
        default:
                // Parent
                sleep(1);
                return 0;
        }

        setsid();
        printf("Child parent = %d\n",getppid());
        return 0;
}