【问题标题】:When apache restart, php background process are killed当apache重启时,php后台进程被杀死
【发布时间】:2013-04-03 15:03:26
【问题描述】:

我对 apache 和 php 有疑问。

我在 php 中调用这个脚本:

exec("nohup sudo QUIET=y sh foo.sh > /home/tmp/log.txt 2>&1 & echo $!", $res);

不久之后,脚本 foo.sh 需要重新启动 apache 以包含新的配置文件:

/etc/init.d/apachectl restart

在命令行中,它工作正常,但在我的 php 脚本中,进程在 apache 重新启动的同时被杀死。为什么?我以为 nohup 分离了它的父进程。

(我指出我无法更改 sh 脚本)

任何帮助将不胜感激。

【问题讨论】:

  • 改用/etc/init.d/apachectl reload
  • nohup 不会将其与其父级分离,它只是防止它在终端会话结束时被关闭(挂断,“hup”)
  • 我无法更改 sh 脚本(它属于公司),对不起:/
  • Apache 的信号支持及其反应方式记录在这里:httpd.apache.org/docs/2.2/stopping.html。 HUP 会杀死所有子节点,但不会重新启动原始父节点。
  • 如果 nohup 不脱离其父级,你会知道另一个命令吗?

标签: php apache process background kill


【解决方案1】:

如果您只想重新读取配置文件,则应使用/etc/init.d/apachectl reload

【讨论】:

  • 我无法更改 sh 脚本(它属于公司),对不起:/,还有其他想法吗?
  • @user1883264 如果您无法更改 Shell 脚本,因为它属于公司。您正在积极使用它的项目中;然后向您的经理提交编辑此文件的请求或创建此 shell 的副本;给它一个不同的名称并根据需要进行更改
【解决方案2】:
/etc/init.d/apachectl reload

这不会stop 服务,而是保持它运行并刷新进程配置。

【讨论】:

    【解决方案3】:

    如果您不想终止进程,请改用/etc/init.d/apachectl reload

    【讨论】:

      【解决方案4】:

      由于apache restart 发送的是 SIGTERM,而不是 SIGHUP, 你应该处理来自foo.sh的SIGTERM

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多