假设我有一个只产生一个子进程的进程.现在,当父进程因任何原因(正常或异常,通过kill,^ C,断言失败或其他任何原因)退出时,我希望子进程死掉.如何正确地做到这一点?
stackoverflow上的一些类似问题:
关于Windows的 stackoverflow的一些类似问题:
我正在编写一个简单的REST服务,它响应来自客户端的请求.全部用PHP.
我担心的是,当我的服务器响应请求时,如果客户端发送回"ok"响应太慢,它最终可能会占用资源.
如何通过lib_curl发送POST请求,将其设置为不等待任何响应,而是在POST数据发送后立即退出?
这甚至可能吗?谢谢 !
假设我从jQuery向后端PHP脚本发出AJAX HTTP请求.请求发出后,PHP脚本开始运行并发挥其魔力.假设我转到另一个网站,远离原始AJAX请求的网站.同样,我在PHP脚本完成之前执行此操作,并有时间回复HTTP响应.即使我在获得HTTP响应之前切换到另一个网站,PHP脚本是否已完成运行并执行其操作?
所以顺序就是这样.
blah.php发生了什么事?执行还在继续吗?它停止了吗?我的意思是它没有机会回应......
我正在尝试编写一个Linux shell脚本(最好是命名为bash)detach.sh,以便安全地从终端分离程序,这样:
调用:./detach.sh prog [arg1 arg2 ...].
是exec-able,例如.通过在shell中运行它:
exec ./detach.sh prog [arg1 arg2 ...]
Run Code Online (Sandbox Code Playgroud)通过适当的引用(主要处理包含空格的参数).
丢弃输出(因为它们是不需要的).
不使用screen,tmux等等(与4相同的原因,加上不需要额外的保姆过程).
使用(合理地)可移植命令和程序,并且没有类似于start-stop-daemon特定于发行版的内容.
我想到了几种方法(#!/bin/bash为了简洁而忽略了shebang线):
nohup:
nohup "$@" >& /dev/null &
Run Code Online (Sandbox Code Playgroud)disown:
"$@" >& /dev/null &
disown
Run Code Online (Sandbox Code Playgroud)setsid:
setsid "$@" >& /dev/null &
Run Code Online (Sandbox Code Playgroud)使用子shell:
("$@" >& /dev/null &)
Run Code Online (Sandbox Code Playgroud)nohup/ setsid结合子壳:
# Or alternatively:
# (nohup "$@" >& /dev/null &)
(setsid "$@" >& /dev/null &)
Run Code Online (Sandbox Code Playgroud)当gedit用作测试程序(代替该 …
我有一个PHP脚本,它在数据库中查询要完成的作业列表,并根据它在数据库中找到的内容(基本上是一个进程队列)触发其他PHP脚本.
队列运行程序脚本执行的某些脚本可能需要30秒左右才能完成运行(生成PDF,调整图像大小等).
问题是shell_exec()在队列中,runner脚本调用处理脚本,但是不等待它们完成,导致队列没有完成.
队列转轮脚本:
#!/usr/bin/php
<?php
// Loop through database and find jobs to be done
shell_exec(sprintf("/root/scripts/%s.php", $row['jobName']));
?>
Run Code Online (Sandbox Code Playgroud)
工作脚本:
#!/usr/bin/php
<?php
shell_exec("/usr/bin/htmldoc -t pdf --webpage test.html > test.pdf");
// Update database to mark job as completed
?>
Run Code Online (Sandbox Code Playgroud)
直接从命令行运行作业脚本,并创建PDF.
有想法该怎么解决这个吗?或者更好的方法来运行进程队列?
可能重复:
php exec命令(或类似)不等待结果
我有一个页面,它运行一系列exec()命令,强制我的PHP脚本停止更改,直到收到响应.如何判断exec()不等待响应并运行命令?
我正在使用一个复杂的命令,它有一个后端系统我可以查询以检查状态,所以我不关心响应.
我有一个PHP脚本,我需要从另一个PHP网页内执行.然而,对于第二个正常运行,第一个需要完全完成.基本上我需要第一页为第二个脚本生成一个新的进程/线程,它将在启动前等待1秒.
执行include会导致阻塞,导致阻止它工作,我无法让它开始使用exec
编辑:
应该澄清一下.这些页面没有输出,也没有通过Web界面连接.所有页面都由来自其他服务器的POST请求调用.
编辑2:
解决方案:让服务器请求页面在第一次返回后1秒钟直接向第二页发送请求.
在我的 Web 应用程序中,当用户更改其帐户时,我调用 php mail() 函数向该用户发送电子邮件通知。执行此操作后,我发现帐户更改操作需要非常长的时间(> 20 秒)才能完成。我怀疑这是因为 PHP 等待 mail() 函数发送电子邮件。有没有什么办法不用等待就可以直接调用下一行代码?
谢谢,
保罗