4

Web ページのボタンを使用してプロセス ID に kill -10 (SIGUSER1) を送信しようとしています。PHP 変数 (PID を保持する) をシェルに渡しながら、さまざまな方法でシグナルを送信しようとしました。以下は私が持っているものです:

$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

お知らせ下さい

4

3 に答える 3

6

これを試してください:

$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 スクリプトであると想定しています。そうでなければ、あなたはそれを機能させたと思いますが、(まだ)多くのことをしていません

于 2012-12-31T17:51:14.000 に答える
5

ほとんどの php 関数は、可能であれば引数を適切なデータ型に変換しようとします。可能であれば、php 関数が文字列を int や float などの数値型に自動的に変換することは非常に一般的です。

しかし、そのように書かれていないものもあり、マニュアルで指定されたデータ型を提供する必要があります。

「long」は数値型なので、整数にキャストするだけです。これは $pid3 が数値文字列であることを前提としているため、キャストの結果は適切なものになります。

$next = posix_kill((int) $pid3, 10);
于 2012-12-31T17:46:28.510 に答える
1

それをintに変換できると思います。そうすればうまくいくはずです:

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

あなたの変数は文字列か何かです。

またはこれを試してください:

文字列にロングキャストする方法は?

于 2012-12-31T17:45:31.373 に答える