信号发送者转换

时间:2016-04-25 18:03:08

标签: c++ linux signals system-calls

我试图用C ++编写程序,用与Linux中kill命令相同的方式向另一个程序发送信号,但似乎我遇到了一些转换问题。在我看来,我不能通过终端将信号作为字符串(SIGINTSIGUSR1等)传递,并在程序内轻松转换。我也不能通过将他们作为通讯员int(2,30等)并直接使用系统调用来实现我的目标。这是我的代码:

将信号传递为int类型

#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;
}

输出

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

至于我尝试使用字符串的时候,我找不到能够正常使用的转换。

提前致谢。

1 个答案:

答案 0 :(得分:1)

导致错误的两个最可能的原因是:

  • 没有给定pid;
  • 的流程
  • 您无权将信号发送给流程。

要确定它是什么,请在调用errno失败后打印并检查kill()的值。有关errno可以获得的kill()值列表,请参阅man page

关于将信号名称转换为数字,请参阅How to convert signal name (string) to signal code?(简而言之,您很可能必须拥有自己的信号名称和相应数字表。)