发送信号通过php进程

问题描述:

我想通过使用网页中的按钮发送一个杀死-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是一个字符串...不是很长... –

就试试这个:

$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

太好了,我被某个人贬低了..德克萨斯州告诉我为什么。试图帮助别人... –

我认为你可以将其转换为整数,那么它应该工作:

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

你的可伸缩是一个字符串或其他任何东西。

或试试这个:

How to cast long to string?

+1

Umm。你在那里得到了一些东西。 '8 |' –

大多数PHP函数会尝试他们的争论对象转换,如果可能适当的数据类型。如果可能的话,它非常常见于php函数,以便将字符串自动转换为数字类型,如int或float。

但是,有些只是没有这样写,你需要提供手册中指定的数据类型。

“long”是一个数字类型,所以只需转换为整数。这个假设$ pid3是一个数字字符串,这样就可以得到合理的结果。

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