我有一个symfony任务,我可以使用以下命令运行:
/home/jason/projects/mcif/./symfony import:start-queue
然后我可以通过这样做看到进程正在运行:
$ ps aux | grep php
jason 5760 91.0 2.5 101628 78128 pts/0 R 13:10 0:04 php /home/jason/projects/mcif/./symfony import:process --id=593 --type=Import
jason 5775 0.0 0.0 4008 764 pts/0 S+ 13:10 0:00 grep --color=auto php
这部分工作正常。现在:
这是我的剧本:
<?php exec('/home/jason/projects/mcif/./symfony import:start-queue');
如果我在命令行上运行此脚本,它可以正常工作。如果我通过浏览器运行这个脚本,我会收到脚本发送的电子邮件,所以我知道它正在运行,但是当我运行ps aux
时我找不到它的进程。
我需要能够找到该过程,因为我需要能够手动杀死它。
任何想法发生了什么?
答案 0 :(得分:1)
htop是一个命令,允许您按树排序,这样您就可以看到可能产生过程的内容,如果您想直观地查找它,就可以将其杀死。
答案 1 :(得分:0)
getpid
(2)。或者,如果你想要黑客攻击,/proc/self
。
答案 2 :(得分:0)
我可以考虑几个解决方案:
你在后台(/home/jason/projects/mcif/./symfony import:start-queue
开始的文件里面,我假设是PHP脚本,否则这不起作用http://php.net/manual/en/function.getmypid.php并将pid写入光盘上的文件。这样你就可以通过从文件中读取pid来杀死它。
从ap {(网站)写入命名管道的请求,从named pipe(mkfifo
)开始后台进程读取(从管道中读取内容exec
调用)。后台流程应位于ps
安装redis并将其从apache(网站)推送到列表中。从后台进程blpop消息。您应该能够在ps
答案 3 :(得分:0)
它通过浏览器运行,这取决于您的确切设置。
php-cgi
进程中运行。我仍然不确定你怎么能弄清楚哪一个正在运行你的任务,但它可能稍微更安全地杀掉这些(特别是如果你使用mod_fcgid而不是fastcgi - 它更好地处理php进程死亡。)因此,简而言之,如果您希望能够在不引起其他不稳定的情况下杀死它,请尽量不要在Web浏览器中运行它。这个问题的其他答案可能会让你找到进程ID,但你会发现它几乎肯定是一个 apache 进程,你可能会也可能不想杀死它。
如果你不介意不稳定,你可以重新启动你的apache服务器,它会杀死你的工作。