waitpid

Why isn't the process I start with Perl's system() a child process?

Perl's system() starts a process, but breaks the parent/child relationship? test.pl: use POSIX; system("./test.sh &"); my $pid = `ps -C test.sh -o pid=`; print "pid: -$pid-\n"; waitpid($pid, 0); test.sh: while true do sleep 1 done When I run test.pl, it finds and prints a correct pid of test.sh. But waitpid() returns -1 an...

Spawned child exits with state = 127

Hi, I use posix_spawnp to execute different processes and I check the status (with waitpid) to make sure the child was created properly int iRet = posix_spawnp(&iPID, zPath, NULL, NULL, argv, environ); if (iRet != 0) { return false; } int iState; waitpid(static_cast<pid_t>(iPID), &iState, WNOHANG); cout << "Wait: PID "...

Test cases in C for WIFSIGNALED, WIFSTOPPED, WIFCONTINUED

I'm playing with waitpid() and signal() and I'm looking for reliable test cases for returning WIFSIGNALED(status) = WIFSTOPPED(status) = WIFCONTINUED (status) = true but can't find any... Care to tell me how can I make sure those return true so I can debug my code? Also, a few hints about what signals should I catch with signal() to te...

What systems do not support WNOHANG option for waitpid?

I have a library for managing child processes that relies on passing the POSIX WNOHANG option to waitpid to perform a non-blocking wait on a process. It is said that not all systems support this option, but it has been a while since I have worked on any of those systems. What systems don't support this option? I'd like to know so that ei...

Why does Linux program that derefrences (char*)0 not always segfault?

I'm testing code that is designed to detect when a child process has segfaulted. Imagine my surprised when this code does not always segfault: #include <stdio.h> int main() { char *p = (char *)(unsigned long)0; putchar(*p); return 0; } I'm running under a Debian Linux 2.6.26 kernel; my shell is the AT&T ksh93 from the Debian k...

Why would waitpid in Perl return wrong exit code?

I get wrong exit code from waitpid and I can't figure out why. Could someone give me some ideas? Here what I do: I start my child process with open2 then I wait for it to finish with waitpid get exit code using $? It always returns with -1 no mater what I return from child process. I check with VS debugger that my program returns an...

determine pid of terminated process

I'm trying to figure out what the pid is of a process that sent the SIGCHLD signal, and I want to do this in a signal handler I created for SIGCHLD. How would I do this? I'm trying: int pid = waitpid(-1, NULL, WNOHANG); .. because I want to wait for any child process that is spawned. Thanks, Hristo ...

Does waitpid yield valid status information for a child process that has already exited?

If I fork a child process, and the child process exits before the parent calls waitpid, then is the exit status information that is set by waitpid still valid? If so, when does it become not valid; i.e., how do I ensure that I can call waitpid on the child pid and continue to get valid exit status information after an arbitrary amount o...

Why is Perl's $? returning the wrong value for the exit code of a forked process?

Consider this trivial example of fork()ing then waiting for a child to die in Perl: #!/usr/bin/perl use strict; use warnings; if (fork() == 0) { exit(1); } waitpid(-1,0); print $?; Running the script on Solaris 10 I get this result: $ perl test.pl 256 I suspect the values of are being shifted upwards because when I do e...

I have a problem with the WIFSIGNALED()/WTERMSIG() macros, after using waitpid()

In this code C i launch a program from the command line and when it is closed from a signal different from SIGTERM (signal for normal end) my code should relaunch the initial program passed from the command line. But it is not so, in fact my code never relaunchs program saying that it is properly terminated.In practice my condition"if(WT...

How to check any thread is working currently

I know there is one for multi processes waitpid(-1,WNOHANG,NULL) that is non-blocking function call to check if there is any child process currently working on But is there any similar lib function to check for multithread? All i want to do is check if there is any thread currently on, if not reset some global values. ...

Returning Exit code from child

I'm trying to return an integer value from a child process. However, if I use exit(1) i get 256 as the output. exit(-1) gives 65280. Is there a way I can get the actual int value that I send from the child process? if(!(pid=fork())) { exit(1); } waitpid(pid,&status,0); printf("%d",status); Edit: Using exit(-1) (which is what I a...