从Perl的system()命令退出代码13?

我试图从系统命令从系统命令system()使用system()

这通常工作正常,但是当我自己不启动perl脚本,但有一个编译的C程序使用C popen()函数运行它,那么perl不能执行其系统命令。 Perl的system()然后返回退出码13。

它只有在Perl中使用反引号而不是system时才起作用。 有谁知道为什么?

这将有助于看到你的代码/输出。 这是我的猜测,在你的问题的根源。

首先,信号13等同于SIGPIPE,在这种情况下,似乎表明perl进程正在尝试写入一个pipe道(即STDOUT / STDERR),但没有任何东西可以读取它。

我testing了一下,我的问题是,你在C程序中处理脚本的输出吗? 在我的testing中,简单地处理perl脚本的输出避免了SIGPIPE错误。

信号13产生:

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

避免信号13:

 fp = popen("/home/chuckx/perl-test/perl.pl","r"); do {} while (fgets(output,80,fp) != NULL); status = pclose(fp); 

我将这个答案join了一个老问题,因为我遇到了与popen类似的问题。 如果我使用popen (在C / C ++程序中)运行一个命令,并且在调用`pclose'之前不读取任何程序输出,它将返回一个值13.我认为这里发生的是运行命令不能写所有的其输出到pipe道(因为我从来没有读过任何东西),所以当它closures,它返回值13。

如果发生这种情况,请尝试在closures之前读取popen返回的pipe道/文件的全部内容。