導航:首頁 > 編程語言 > phpkill進程

phpkill進程

發布時間:2023-06-07 01:49:49

linux 如何關閉正在執行的php腳本

1. 如果不是後台執行,直接ctrl+c 就終止執行
2. 如果是後台執行
首先執行:sudo ps -ef|grep php

再次執行:sudo kill -9 pid 或者 sudo kill -15 pid

pid 為ps命令查處的進程號。

② php如何開啟一個進程去關閉另一個進程

執行 ps 命令,看進程號,然後 kill 掉,或者讓另一個進程給這個進程號發送 SIGTERM 信號,這個進程就退出了

③ linux 下寫 shell kill掉運行時間超過5分鍾的PHP進程

可以的,能根據Cpu累積耗時殺掉程序。
相關進程名字要知道哈。
假設以php進程為名字。
p_name=php
while
true
do
sleep
3
#每3秒檢查一次。
pro="$(ps
-A|grep
"$p_name"|head
-n1)"
time="$(echo
$pro|awk
'{
split($3,tab,/:/);
if
(tab[2]+tab[1]*60>=5)
{print
1}else{print
0}
}')"
#上面那句利用awk判斷時間是不是大於5分鍾。是則輸出1,否則輸出0.
pid="$(echo
$pro|awk
'{print
$1}')"
#如果為1
就殺掉那個進程。
if
[
$time
=
'1'
]
kill
-9
$pid
fi
done

④ php進程超時介面返回504錯誤分析

在一次介面測試中,發現返回的http 504 time out 的錯誤,然後查看了php-fpm的錯誤日誌,發現了如下錯誤

從表現上看,是php進程超時導致的進程被kill了,那麼這個超時時間以及kill的機制是跟哪些參數有關呢,這里系統這里一下。

Nginx服務一般因為php的錯誤或者超時會有兩種錯誤碼502 bad Gateway 或者 504 Gateway Time-out

一種情況是php產生了語法錯誤,比如循環調用、變數作用域錯誤、方法不存在等,如果開啟錯誤日誌輸出的話,這種錯誤在php-fpm的錯誤日誌中是可以看到調用棧信息的。

另外一種情況可能就是超時引起的php-fpm主動kill的情況,在php.ini和php.fpm中有兩個配置項,用來管理php腳本的最大執行時間

當php腳本的執行時間超過這個時間時,PHP-FPM不只會終止腳本的執行,還會終止執行腳本的Worker進程。所以Nginx會發現與自己通信的連接斷掉了,就會返回給客戶端502錯誤。

以頂部的錯誤為例,當報502錯誤是,nginx的errorlog中有如下日誌,:

所以只需將這兩項的值調大一些就可以讓PHP腳本不會因為執行時間長而被終止了。request_terminate_timeout可以覆蓋max_execution_time,

所以如果不想改全局的php.ini,那隻改PHP-FPM的配置就可以了。

此外要注意的是Nginx的upstream模塊中的max_fail和fail_timeout兩項。這兩個配置表示在fail_timeout事件內,如果fail的測試達到max_fail,那麼在接下來的fail_timeout時間內,Nginx都會認為上游伺服器掛掉了,都會返回502錯誤。

所以可以將max_fail調大一些,將fail_timeout調小一些。

PHP-FPM設置的腳本最大執行時間已經夠長了,但執行耗時PHP腳本時,發現Nginx報錯從502變為504了。這是為什麼呢?

因為我們修改的只是PHP的配置,Nginx中也有關於與上游伺服器通信超時時間的配置

以Nginx超時時間為90秒,PHP-FPM超時時間為300秒為例,報504 Gateway Timeout錯誤時的Nginx錯誤訪問日誌如下:

調高這三項的值(主要是read和send兩項,默認不配置的話Nginx會將超時時間設為60秒)之後,504錯誤也解決了。

而且這三項配置可以配置在http、server級別,也可以配置在location級別。擔心影響其他應用的話,就配置在自己應用的location中吧。

要注意的是factcgi_connect/read/send_timeout是對FastCGI生效的,而proxy_connect/read/send_timeout是對proxy_pass生效的。

參考鏈接: http://www.cnblogs.com/fei33423/p/8184098.html 感謝分享!

⑤ mac php-fpm剛殺死又啟動

如果用的unix-like系統,可以用進程查看命令:
ps -ef | grep php-fpm

⑥ PHP 中怎樣終止單個進程

<?php
exec("kill-9pid,$op,$status);
?>

把結果逐行追加到$op的結尾處,只有指定了第二 個參數時,才可以用第三個參數,用來取得命令執行的狀態碼。$status 1 kill成功,0 是失敗(一般情況下是無此進程)。


我的實際項目中是在執行的開始通過getmypid()獲取進程id保存到資料庫,如果crontab再次觸發則把之前的進程kill掉再重新執行一遍以上代碼。


希望能幫到你。

⑦ 執行php.exe程序cli提示錯誤如何解決

#!/usr/local/bin/php –q
<?php
//Windows平台上,上行應該為:#!C:\php\php.exe -q
echo "你好 PHP CLI!";
?>
不要忘了給該文件設置為可執行的許可權:
$ chmod 755 myfile.php
然後直接輸入以下命令,按回車鍵即可以運行:
$ ./myfile.php
如果要在Windows系統下運行該腳本,則不需要設置文件屬性,
可以直接運行該腳本。
Microsoft Windows [版本 6.0.6000]
版權所有 (C) 2006 Microsoft Corporation。保留所有權利。
C:\ >myfile.php
你好 PHP CLI!

再重申一次:如果在Windows平台,CLI腳本的第一行一定要寫正確php.exe所在的位置,像這樣(另外,如果要在CLI腳本中加註釋語句,則要把注釋寫在PHP標簽裡面,因為CLI解釋只認識第一行,不在PHP標簽里認為是語法錯誤):

#!C:\php\php.exe -q

這樣,可以看到在命令行下信息已經列印出來,證明該CLI腳本已經成功運行。

2.從命令行上讀取參數
如果想從命令行獲取參數,CLI可以從$_SERVER['argc']和$_SERVER['argv'']取得參數的個數和值。我們再建立一個文件,名字為testargs.php,腳本代碼如下:

#!C:\php\php.exe –q
<?php
//UNIX和Linux平台下應該為#!/usr/local/bin/php –q
echo "測試獲取參數:\n";
echo $_SERVER["argc"]."\n";
//顯示傳入的參數值,從索引1開始顯示
echo $_SERVER["argv"][1]."\n";
echo $_SERVER["argv"][2]."\n";
echo $_SERVER["argv"][3]."\n";
echo $_SERVER["argv"][4]."\n";
?>
在命令行輸入如下代碼:
C:\Users\John>testargs.php Always To Be Best
測試獲取參數:
4
Always
To
Be
Best

因為我們輸入了一串單詞,為「Always To Be Best」,腳本參數以空格分隔。因此,PHP將其計為4個參數,下面對此說明。

$_SERVER["argc"]數組返回一個整型的數,代表從命令行上回車後一共輸入了幾個參數。

從上例的結果已經看出,要訪問已經傳入的參數值,需要從索引1開始。因為腳本本身的文件已經佔用了索引0,即$_SERVER["argv"][0]。

3.處理I/O通道
PHP最初設計不是用於與用戶直接的鍵盤輸入或文本輸出結合使用。了解這一設計是至關重要的,因為如果需要在命令行中執行任何操作,都必須能夠與用戶來回通信。

輸入輸出(I/O)通道這個思想來源於UNIX系統,UNIX系統提供3個文件句柄,用以從一個應用程序及用戶終端發送和接收數據。

我們可以把一個腳本的輸出重定向到一個文件:
php world.php > outputfile

如果是在UNIX系統下,也可以使用通道定向到另一個命令或應用程序中。例如:
php world.php | sort.

在PHP 5 CLI中,有一個文件流句柄,可以使用3個系統常量,分別為STDIN、STDOUT和STDERR。下面我們分別介紹。

(1)STDIN
STDIN全稱為standard in或standard input,標准輸入可以從終端取得任何數據。

格式:stdin (』php://stdin』)

下面的例子是顯示用戶輸入:

#!/usr/local/bin/php -q
<?php
$file = file_get_contents("php://stdin", "r");
echo $file;
?>

這段代碼的工作原理與cat命令很相似,回轉提供給它的所有輸入。但是,這時它還不能接收參數。

STDIN是PHP的標准輸入設備,利用它,CLI PHP腳本可以做更多的事情。如下面例子:

#!/usr/local/bin/php -q
<?php
//UNIX平台下第一行應該為#!/usr/bin/php –q
/* 如果STDIN未定義,將新定義一個STDIN輸入流 */
if(!defined("STDIN")) {
define("STDIN", fopen('php://stdin','r'))
}
echo "你好!你叫什麼名字(請輸入):\n";
$strName = fread(STDIN, 100); //從一個新行讀入80個字元
echo '歡迎你'.$strName."\n";
?>
該腳本執行後將顯示:
你好!你叫什麼名字(請輸入):
比如,輸入Raymond之後,將顯示:
歡迎你Raymond

(2)STDOUT
STDOUT全稱為standard out或standard output,標准輸出可以直接輸出到屏幕(也可以輸出到其他程序,使用STDIN取得),如果在PHP CLI模式里使用print或echo語句,則這些數據將發送到STDOUT。

格式:stdout (』php://stdout』)

我們還可以使用PHP函數進行數據流輸出。如下面例子:

#!/usr/local/bin/php –q
<?php
$STDOUT = fopen('php://stdout', 'w');
fwrite($STDOUT,"Hello World");
fclose($STDOUT);
?>
輸出結果如下:
Hello World
例如,echo和print命令列印到標准輸出。
#!/usr/local/bin/php –q
Output #1.
<?php
echo "Output #2.";
print "Output #3."
?>
這將得到:
Output #1.
Output #2.Output #3.

說明:PHP標記外的新行已被輸出,但是echo命令或print命令中沒有指示換行。事實上,命令提示符重新出現在Output #2.Output #3. 所在的行中。PHP擁有的任何其他列印函數將會像此函數一樣運行正常,任何寫迴文件的函數也是一樣的。

#!/usr/local/bin/php -q
<?php
$STDOUT = fopen("php://stdout", "w");
fwrite($STDOUT, "Output #1.");
fclose($STDOUT);
?>

以上代碼將把php://stdout作為輸出通道顯式打開,並且php://output通常以與php://stdout相同的方法運行。

(3)STDERR
STDERR全稱為standard error,在默認情況下會直接發送至用戶終端,當使用STDIN文件句柄從其他應用程序沒有讀取到數據時會生成一個「stdin.stderr」。

格式:stderr (』php://stderr』)

下面的腳本表示如何把一行文本輸出到錯誤流中。

#!/usr/local/bin/php –q
<?php
$STDERR = fopen('php://stderr', 'w');
fwrite($STDERR,"There was an Error");
fclose($STDERR);
?>

PHP 5.2可以直接使用STDOUT作為常量,而不是定義上面使用的變數$STDOUT,為了兼容之前版本,我們仍使用了自定義變數,如果您使用的是PHP 5.2,則可以參考STDIN的第二個例子。

4.後台運行CLI
如果正在運行一個進程,而且在退出賬戶時該進程還不會結束,即在系統後台或背景下運行,那麼就可以使用nohup命令。該命令可以在退出賬戶之後繼續運行相應的進程。

nohup在英文中就是不掛起的意思(no hang up)。該命令的一般形式為:
nohup –f scriptname.php &

使用nohup命令提交作業,在默認情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件。
nohup scriptname.php > log.txt &
這樣,PHP CLI腳本執行後的結果將輸出到log.txt中,我們可以使用tail命令查看該內容:
tail -n50 -f log.txt

現在再來實現兩個例子,第一個是每隔10分鍾自動生成一個靜態HTML文件,並一直執行下去。腳本代碼如下:

#! /usr/local/bin/php
<?php
set_time_limit(0);
while(true){
@fopen("/usr/local/www/data-dist/content/
article_".time().".html","w");
sleep(600);
}
?>

保存並且退出vi編輯器,然後賦予genHTML.php文件可執行許可權:

#>chmod 755 genHTML.php
然後讓腳本在後台執行,執行如下命令:
$nohup genHTML.php –f &
執行上述命令後出現如下提示:
[1] 16623

按回車鍵後將出現shell提示符。上面的提示就是說,所有命令執行的輸出信息都會放到nohup.out文件中。

執行上面命令後,每隔10分鍾就會在指定的目錄生成指定的HTML文件,如article_111990120.html等文件。

如何終止CLI程序的後台運行呢?

可以使用kill命令來終止這個進程,終止進程之前要知道進程的PID號,即進程ID,我們使用ps命令:

www# ps
PID TT STAT TIME COMMAND
561 v0 Is+ 0:00.00 /usr/libexec/getty Pc ttyv0
562 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1
563 v2 Is+ 0:00.00 /usr/libexec/getty Pc ttyv2
564 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3
565 v4 Is+ 0:00.00 /usr/libexec/getty Pc ttyv4
566 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5
567 v6 Is+ 0:00.00 /usr/libexec/getty Pc ttyv6
568 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7
16180 p0 I 0:00.01 su
16181 p0 S 0:00.06 _su (csh)
16695 p0 R+ 0:00.00 ps
16623 p0 S 0:00.06 /usr/local/bin/php /usr/local/www/data/genHTML.php
已經看到PHP的進程ID是:16623,於是再執行kill命令:
$ kill -9 16623
[1]+ Killed nohup /usr/local/www/data/genHTML.php
這時該命令的進程就已經被終止了,再使用ps命令:
$ ps
PID TT STAT TIME COMMAND
82374 p3 Ss 0:00.17 -bash (bash)
82535 p3 R+ 0:00.00 ps

剛才的PHP CLI腳本已經沒有了,如果直接運行ps命令無法看到進程,那麼就結合使用ps & apos兩個命令來查看。

注意:上面例子必須運行在UNIX或者Linux系統中,如FreeBSD、Redhat Linux等,在Windows環境不支持nohup命令。

閱讀全文

與phpkill進程相關的資料

熱點內容
80年代香港殺手電筒影大全集 瀏覽:912
《熱情的鄰居》李彩 瀏覽:997
不收費的小電影在哪裡看 瀏覽:608
適合雙人看的愛情片5g視頻 瀏覽:585
安卓中控怎麼安裝應用 瀏覽:83
電影大全鬼片免費收看 瀏覽:147
kanxv5. com/6/ index.php/ 瀏覽:584
看外國電影的網站 瀏覽:18
染島貢演過的電影 瀏覽:79
經典系列動作電影 瀏覽:730
勞拉是哪個電影里的名字 瀏覽:677
天才黑客林凡 瀏覽:515
中國電影票房排行榜實時票房貓眼 瀏覽:287
收母收姐妹 瀏覽:378
一男兩女後面兩女懷孕的番號 瀏覽:555
不需要會員就能看電視劇的網站 瀏覽:427
朝鮮古裝三及片 瀏覽:113
手機怎麼設置不解壓 瀏覽:110
崇石是誰演的 瀏覽:827
免費影視觀看網站入口 瀏覽:877