2016-04-25 83 views
-1

我试图用C++编写一个程序,它发送信号给另一个程序,就像你在Linux中使用kill命令一样,但似乎我遇到了一些转换问题。正如我所看到的,我不能仅仅通过终端将信号作为字符串(SIGINT,SIGUSR1等)传递并在程序中轻松转换它们。我也不能通过将他们作为他们的记者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. 

至于当我试图使用字符串,我无法找到工作正常转换。

在此先感谢。

+0

什么是'errno'你得到'杀()'? – NPE

+0

'ESRCH 3/*没有这样的过程* /'所以我想我是发送信号到错误的PID。通过纠正它,我通过整数工作,但传递字符串时仍然没有运气。 –

+0

请参阅下面的完整答案。 – NPE

回答

1

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

  • 有没有处理给定pid;
  • 您无权将信号发送到进程。

要弄清楚它是,打印出来并调用kill()失败后检查的errno值。请参阅man page以获取的errno值列表。

至于转换信号名称为数字,看How to convert signal name (string) to signal code?(简单地说,你将极有可能有自己的信号名称和相应数量的表格。)

+0

这是第一个。我得到了errno#3(没有这样的过程)。似乎它直接传递信号int代码时工作,但仍然没有字符串转换的运气。谢谢您的帮助。 –