【问题标题】:Sending signals to process via php通过php发送信号进行处理
【发布时间】:2012-12-31 17:39:15
【问题描述】:

我正在尝试通过使用网页中的按钮将 kill -10 (SIGUSER1) 发送到进程 ID,我尝试了不同的方式来发送信号,同时将 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

请指教

【问题讨论】:

  • 好的,那么 /var/www/parse2.php 的 php 脚本的第 15 行是什么?试试 echo $pid3 ...
  • -_- 第 15 行是:$next = posix_kill($pid3, 10);我也添加了 echo "$pid3";它的回声是正确的
  • 那么就是它所说的那样,$pid3是一个字符串...不是很长...
  • 在调用 posix_kill 之前使用 var_dump() 检查类型/内容。
  • 尝试投射它:(long)

标签: php shell


【解决方案1】:

试试这个:

$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 脚本。否则,我认为您可以正常工作,但还没有做很多(还)

【讨论】:

  • idk 否决了你,但他们需要停下来去别的地方。你似乎是唯一一个真正试图帮助这里的人的人......巨魔
  • 另外,为了回答 @GlennPlas 的问题,显然 Zend 使所有 ints long。什么的。
  • Tx Jared,我不知道。
  • @GlennPlas 感谢您的跟进!!!!非常感激!我的代码没有更多内容,因为我只是为 ezstream/icecast 制作了一个下一步按钮。当我按下按钮(通过网站)到下一首歌曲时,将运行此代码。我对 sig_handler 函数有疑问。这是否意味着进入同一个源文件,是否应该在 $next = posix_kill(intval(trim($pid3)), 10); 之前进行?
  • 这是php函数,所以正常的php规则适用。您可以将它们包含在外部文件中,但将它们放在同一个文件中是有意义的。因此,PHP 中的函数可以放在文件的顶部/底部,只要它在某处定义即可。这仅取决于您发送的信号是什么,所以如果那是一个正在运行的 PHP 脚本,它必须在那里可用。
【解决方案2】:

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

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

"long" 是数字类型,所以只需转换为整数。这假设 $pid3 是一个数字字符串,因此强制转换会产生一些合理的结果。

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

【讨论】:

    【解决方案3】:

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

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

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

    或者试试这个:

    How to cast long to string?

    【讨论】:

    • 嗯。你有一些倒退的东西。 8|
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2020-03-17
    • 2011-02-11
    • 1970-01-01
    • 2011-05-18
    相关资源
    最近更新 更多