2016-04-25 20 views
-1

。私はそれを見るように、私はちょうど端子からの文字列(SIGINTSIGUSR1、など)などの信号を通過させ、プログラム内で簡単に変換することはできません。どちらも私は彼らの通信員としてint S(2,30、など)を渡すと、直接システムコールを使って、自分の目標を達成することができました。ここに私のコードは次のとおりです。信号を通過させる信号送信側変換

種類

#include <iostream> 
#include <csignal> 
#include <unistd.h> 
#include <cstdlib> 

using namespace std; 


int main (int argc, char* argv[]) { 
    int pid = atoi(argv[1]); 
    int signal = atoi(argv[2]); //passing signals directly as int 

    cout << signal << endl; 

    int error = kill(pid, signal); 

    if(error !=0) 
     cout << "Error sending signal to catcher program."<< endl; 
    return 0; 
} 

intとして、私は文字列を使用しようとしたときについては

~$./signal_sender 5977 2 
2 
Error sending signal to catcher program. 

出力は、私がきちんと働いていた変換を見つけることができませんでした。

ありがとうございます。

+0

はあなたから取得errno' ''殺す何() '? – NPE

+0

'ESRCH 3/*そのようなプロセスはありません* /'だから私は間違ったPIDに信号を送信していたと思います。それを修正することで、intを使って作業しましたが、文字列を渡すときはまだ運がありません。 –

+0

下記の私の全回答を参照してください。 – NPE

答えて

1

エラー用の2つの最も可能性の高い原因は次のとおりです。

  • 与えpidとはプロセスはありません。
  • あなたはプロセスにシグナルを送信する権限がありません。

kill()への呼び出しが失敗した後に、それが何であるかを調べて、errnoの値を調べて調べます。あなたがkill()から取得することができますerrno値のリストについてはman pageを参照してください。

番号に信号名を変換すると、How to convert signal name (string) to signal code?は(一言で言えば、あなたが最も可能性の高い信号名と対応する番号の独自のテーブルを持っている必要があります。)を参照してください

+0

それは最初のものでした。私はerrno#3を持っています(そのようなプロセスはありません)。シグナルのintコードを直接渡すときには動作するようですが、文字列変換では不運です。助けてくれてありがとう。 –

関連する問題