簡體   English   中英

進程正在運行,但找不到

[英]Process is running but I can't find it

我有一個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腳本開始工作,則找不到進程。

這是我的腳本:

<?php exec('/home/jason/projects/mcif/./symfony import:start-queue');

如果我在命令行上運行此腳本,它將運行正常。 如果通過瀏覽器運行此腳本,則會收到該腳本發送的電子郵件,因此我知道它正在運行,但是當我運行ps aux時找不到它的進程。

我需要能夠找到該進程,因為我需要能夠手動將其殺死。

有什么想法嗎?

htop是一個命令,可讓您按樹排序,以便可以看到可能導致該過程的內容,並在希望直觀查看時以這種方式殺死它。

getpid (2)。 或者,如果您打算接受黑客攻擊,請/proc/self

我可以考慮一些解決方案:

  1. 在您以后台啟動的文件內部(/home/jason/projects/mcif/./symfony import:start-queue ),我認為這是PHP腳本,否則此方法不起作用http://php.net/manual/zh/ function.getmypid.php並將pid寫入光盤上的文件。 這樣,您可以通過從文件讀取pid殺死它。

  2. 啟動后台進程,該進程從命名管道( mkfifo讀取(當從管道中讀取exec make的調用時) 請求來自apache(網站)的請求,該請求寫入命名管道。 后台進程應以ps

  3. 安裝redis並將其從apache(網站)推送到列表中。 來自后台進程的blpop消息。 同樣,您應該能夠在ps找到后台進程

它是通過瀏覽器運行的,這取決於您的確切設置。

  • 最可能的情況(因為這是正常,最簡單的LAMP設置),是您將Apache與mod_php一起使用; 在這種情況下,PHP是apache進程的一部分 ,您將需要殺死正在運行它的Apache進程。 弄清楚哪些是棘手的,並且可能會有副作用。 我建議您改為從cron運行該作業,以便如果可以選擇的話,它總是從命令行運行。
  • 另一種可能性是您正在使用某種fastcgi設置(較不常見,更復雜,但性能更好),在這種情況下,您的任務在某個地方的單獨php-cgi進程中運行。 我真不知道你怎么能找出哪一個是跑不過你的任務,但它可能就更安全殺死這些(特別是如果你使用mod_fcgid而不是FastCGI的-它處理PHP程序死亡更好)。

因此,簡而言之,如果希望能夠殺死它而不引起其他不穩定情況,請不要從Web瀏覽器中運行它。 該問題的其他答案可以讓您找到進程ID,但是您幾乎會發現它肯定是apache進程,您可能希望也可能不希望終止它。

如果您不介意不穩定,則只需重新啟動apache服務器,它將終止工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM