我试图通过使用网页中的按钮向进程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
请告知
答案 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是一个字符串或其他任何东西。
或试试这个: