c - 在c中重新加载linux服务

标签 c linux service

我想在c和cgi代码中重启linux服务,如apache、bind、proftpd等。

我使用 system() 来做到这一点,例如:

system ("service httpd reload");

我还在编译的程序上设置 suid 并运行它。但不工作并返回权限错误。

我该怎么办?

编辑: 我的 Apache 记录错误:

[Wed Dec 21 21:07:13 2011] [error] [client *] cannot remove `/var/run/httpd.pid'
[Wed Dec 21 21:07:13 2011] [error] [client *] : Permission denied
[Wed Dec 21 21:07:13 2011] [error] [client *]
[Wed Dec 21 21:07:13 2011] [error] [client *] touch:
[Wed Dec 21 21:07:13 2011] [error] [client *] cannot touch `/var/lock/subsys/httpd'
[Wed Dec 21 21:07:13 2011] [error] [client *] : Permission denied

以及 named、proftpd 等的相同日志

最佳答案

这里有几件事情要检查:

  1. 确保编译后的程序有suid root(即程序的属主是root)。
  2. 确保您正在从中执行程序的分区没有安装“noexec”选项。

关于c - 在c中重新加载linux服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591595/

相关文章:

c - 指向 void 的指针作为函数中的参数,没有可变数量参数的原型(prototype)

Android:服务类中的 intent.putExtra 以获取通知

Java 作为 Unix 服务运行

手机关机时正在运行的Android服务在手机开机时自动启动

c 在循环中为二维指针数组分配空间

c - 你如何声明一个循环缓冲区?

c - bit_test() 函数的作用是什么?

linux - 在 VFS 之上缓冲

linux - 内核如何知道物理内存基址?

php - 如何检查 Ubuntu 12.04 LTS 上是否安装了多个版本的 PHP?