C 使用system()执行shell脚本将返回256。这是什么意思?

C 使用system()执行shell脚本将返回256。这是什么意思?,c,linux,shell,daemon,C,Linux,Shell,Daemon,我已经编写了一个shell脚本来软重启HAProxy(反向代理)。从shell执行脚本是可行的。但是我需要一个守护进程来执行脚本。那不行系统()返回256。我不知道那是什么意思 #!/bin/sh # save previous state mv /home/haproxy/haproxy.cfg /home/haproxy/haproxy.cfg.old mv /var/run/haproxy.pid /var/run/haproxy.pid.old cp /tmp/haproxy.cfg.

我已经编写了一个shell脚本来软重启HAProxy(反向代理)。从shell执行脚本是可行的。但是我需要一个守护进程来执行脚本。那不行<代码>系统()返回256。我不知道那是什么意思

#!/bin/sh
# save previous state
mv /home/haproxy/haproxy.cfg /home/haproxy/haproxy.cfg.old
mv /var/run/haproxy.pid /var/run/haproxy.pid.old

cp /tmp/haproxy.cfg.new /home/haproxy/haproxy.cfg
kill -TTOU $(cat /var/run/haproxy.pid.old)
if haproxy -p /var/run/haproxy.pid -f /home/haproxy/haproxy.cfg; then
  kill -USR1 $(cat /var/run/haproxy.pid.old)
  rm -f /var/run/haproxy.pid.old
  exit 1
else
  kill -TTIN $(cat /var/run/haproxy.pid.old)
  rm -f /var/run/haproxy.pid
  mv /var/run/haproxy.pid.old /var/run/haproxy.pid
  mv /home/haproxy/haproxy.cfg /home/haproxy/haproxy.cfg.err
  mv /home/haproxy/haproxy.cfg.old /home/haproxy/haproxy.cfg
  exit 0
fi
HAProxy与用户HAProxy一起执行。我的守护进程也有自己的用户。两者都与sudo一起运行


有什么提示吗?

根据和,Perl的
system()
返回的退出值乘以256。所以它实际上是以
1
退出的。似乎是这样。

除非系统返回-1,否则其返回值的格式与系统调用的等待系列(man 2 wait)的状态值的格式相同。有宏可帮助您解释此状态:

man 3 wait

列出这些宏以及它们告诉您的内容。

256的代码可能意味着系统命令无法找到运行它的二进制文件。请记住,它可能没有调用bash,也可能没有设置路径。请使用二进制文件的完整路径重试

调用守护进程中包含“kill”命令的脚本时,我也遇到同样的问题。 守护进程必须已关闭stdout、stderr。。。
使用类似系统的东西(“scrips.sh>/dev/null”)应该可以工作。

谢谢!所以这是EPERM/*操作不允许的*/。。。但是为什么。。。我用sudo启动守护进程。Perl不会返回成倍的退出值。它返回一个16位的值,退出代码在较高的8位。这通常是相同的,但并不总是如此。这也适用于大多数Linux/gcc二进制文件,而不仅仅是Perl.No。如果找不到可执行文件,它将返回-1。