Exit code 13 from Perl’s system() command

perl

I am trying to call system commands from perl, using system().

That usually works fine, but when I don't start the perl script myself, but have a compiled C program run it using the C popen() function, then perl is not able to execute its system commands. Perl's system() then returns with exit code 13.

It works only if I use the backticks in Perl, instead of system. Does anyone know why?

Best Answer

It would help to see some of your code/output. Here's my guess at the root cause of your problem.

First, signal 13 equates to SIGPIPE, which in this case seems to indicates the perl process is attempting to write to a pipe (i.e. STDOUT/STDERR), but nothing is there to read it.

I tested a bit and my question is, are you handling the output from the the script within your C program? In my tests, simply processing the output of the perl script avoided the SIGPIPE error.

Signal 13 produced:

fp = popen("/home/chuckx/perl-test/perl.pl","r");
status = pclose(fp);

Signal 13 avoided:

fp = popen("/home/chuckx/perl-test/perl.pl","r");

do {} while (fgets(output,80,fp) != NULL);

status = pclose(fp);
Related Topic