2012-12-31 95 views
3

我想通過使用網頁中的按鈕發送一個殺死-10(SIGUSER1)到進程ID,我嘗試了不同的方式來發送信號,同時通過PHP變量(持有PID)到外殼。下面是我有:發送信號通過php進程

$next = posix_kill($pid3, 10); 

眼下,這是給我下面的錯誤:

PHP Warning: posix_kill() expects parameter 1 to be long, 
       string given in /var/www/parse2.php on line 15 

請告知

+0

好吧,所以在php腳本在/var/www/parse2.php 15行什麼?試試echo $ pid3 ... –

+0

-_-第15行是:$ next = posix_kill($ pid3,10); 我也加了echo「$ pid3」;並且它回顯正確 – xxethanixx

+0

然後它就是這樣說的,$ pid3是一個字符串...不是很長... –

回答

4

就試試這個:

$next = posix_kill((long)$pid3, 10); 

Intval因此,警告不會消失,返回一個int,但它可能會工作

所以,既然你似乎有一個問題仍然較好會像建議其他地方:

$next = posix_kill(intval($pid3), 10); 

如果這不起作用,我會建議告訴我們你使用的PHP版本。

除非你有隨之而來的空間,然後嘗試:

$next = posix_kill(intval(trim($pid3)), 10); 

更新:

所以,現在你得到了它的工作,你需要捕獲的信號,並利用它做些什麼,你需要附加一個回調函數,因爲我不知道你的其他代碼。你需要的東西是這樣的:

pcntl_signal(SIGUSR1, "sig_handler"); 

然後做一些對信號:

function sig_handler($sig) { 

    switch($sig) { 
     case SIGUSR1: 
     // logtrace(1,"received USR1 signal."); 
     break; 
    ... 

我只是想想1的事情,我認爲我們正在發送信號的過程是一個PHP腳本。否則,我認爲你得到它的工作,但並沒有做很多(但)

+0

當我使用它時,出現語法錯誤:PHP解析錯誤:語法錯誤,意外'$ pid3'(T_VARIABLE) – xxethanixx

+0

按照其他地方的建議嘗試intval()。可怕地[posix_kill](http://php.net/manual/en/function.posix-kill.php)需要一個int,奇怪的是它需要很長的時間。 –

+0

太好了,我被某個人貶低了..德克薩斯州告訴我爲什麼。試圖幫助別人... –

1

我認爲你可以將其轉換爲整數,那麼它應該工作:

$next = posix_kill((int)$pid3, 10); 

你的可伸縮是一個字符串或其他任何東西。

或試試這個:

How to cast long to string?

+1

Umm。你在那裏得到了一些東西。 '8 |' –

5

大多數PHP函數會嘗試他們的爭論對象轉換,如果可能適當的數據類型。如果可能的話,它非常常見於php函數,以便將字符串自動轉換爲數字類型,如int或float。

但是,有些只是沒有這樣寫,你需要提供手冊中指定的數據類型。

「long」是一個數字類型,所以只需轉換爲整數。這個假設$ pid3是一個數字字符串,這樣就可以得到合理的結果。

$next = posix_kill((int) $pid3, 10);