通过php发送信号进行处理

时间:2012-12-31 17:39:15

标签: php shell

我试图通过使用网页中的按钮向进程ID发送kill -10(SIGUSER1),我尝试了不同的方法来发送信号,同时将PHP变量(包含PID)传递给shell。以下是我的内容:

$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

请告知

3 个答案:

答案 0 :(得分:5)

大多数php函数会尝试将其参数强制转换为适当的数据类型(如果可能)。如果可能的话,php函数自动将字符串自动转换为数字类型(如int或float)非常常见。

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

“long”是一种数字类型,因此只需转换为整数。假设$ pid3是一个数字字符串,因此演员表会产生合理的效果。

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

答案 1 :(得分:5)

试试这个:

$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;
   ...

我只考虑一件事,我假设我们发送信号的过程是一个PHP脚本。否则我认为你已经开始工作但是并没有做很多事情(还有)

答案 2 :(得分:1)

我认为你可以将它转换为int然后它应该工作:

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

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

或试试这个:

How to cast long to string?