我使用的是CentOS 6.5。我有一个perl脚本,在这个脚本中我有系统调用:system("echo 1234 > /tmp/1.txt");这个perl脚本是由守护进程使用execv命令调用的。问题是,当perl脚本到达这个系统调用时,脚本就会崩溃。在查看forked进程时,我看到了它。我试图在perl脚本内部的系统调用中使用eval,但它仍然崩溃。我有几台主机的操作系统完全相同,但这个问题只发生在这台特定的机器上。当手动运行perl脚本时,它工作得很好。守护进程以root用户身份运行,与我的所有其他主机一样。任何帮助都会得到重视。
谢谢你们。
编辑:没有错误消息之类的,如果有一些错误,它会更容易。下面是相关的代码片段:
守护进程(用C编写):
char command[2048];
sprintf(command, "./run.pl ");
char *args[] = {"sudo", "-u", user, "bash","-c",command,NULL};
execv("/usr/bin/sudo",args);Perl脚本(run.pl):
system("echo 1234 > /tmp/1.txt");发布于 2016-05-10 23:36:17
所以,我找到了非常奇怪的解决方案,不知道为什么-但它是有效的..在C程序的命令参数中,我将stdout设置为/dev/null。很奇怪,但很管用。
char command[2048];
sprintf(command, "./run.pl > /dev/null");
char *args[] = {"sudo", "-u", user, "bash","-c",command,NULL};
execv("/usr/bin/sudo",args);https://stackoverflow.com/questions/37132768
复制相似问题