信号发送器转换 我试图用C++编写一个程序,将信号发送给另一个程序,就像Linux中的杀戮< /代码> CAMMUN一样,但是我似乎遇到了一些转换问题。在我看来,我不能仅仅通过终端将信号作为字符串(SIGINT,SIGUSR1,等等)传递,并在程序内部轻松转换它们。通过将它们作为对应的ints(2,30等)传递并直接使用系统调用,我也无法实现我的目标。这是我的密码: 以int类型传递信号

信号发送器转换 我试图用C++编写一个程序,将信号发送给另一个程序,就像Linux中的杀戮< /代码> CAMMUN一样,但是我似乎遇到了一些转换问题。在我看来,我不能仅仅通过终端将信号作为字符串(SIGINT,SIGUSR1,等等)传递,并在程序内部轻松转换它们。通过将它们作为对应的ints(2,30等)传递并直接使用系统调用,我也无法实现我的目标。这是我的密码: 以int类型传递信号,c++,linux,signals,system-calls,C++,Linux,Signals,System Calls,至于当我尝试使用字符串时,我找不到一个能正常工作的转换 提前感谢。导致错误的两个最可能的原因是: 没有具有给定的pid的进程 您没有向进程发送信号的权限 要确定它是哪个,请在调用kill()失败后打印并检查errno的值。有关可从kill()获取的errno值的列表,请参阅 关于将信号名称转换为数字,请参见(简而言之,您很可能必须拥有自己的信号名称和相应数字表)。从kill()?ESRCH 3/*没有这样的过程*/得到的errno是什么。通过更正它,我让它通过ints工作,但在传递字符串时仍

至于当我尝试使用字符串时,我找不到一个能正常工作的转换


提前感谢。

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

  • 没有具有给定的
    pid
    的进程
  • 您没有向进程发送信号的权限
要确定它是哪个,请在调用
kill()
失败后打印并检查
errno
的值。有关可从
kill()
获取的
errno
值的列表,请参阅


关于将信号名称转换为数字,请参见(简而言之,您很可能必须拥有自己的信号名称和相应数字表)。

kill()
ESRCH 3/*没有这样的过程*/
得到的
errno
是什么。通过更正它,我让它通过ints工作,但在传递字符串时仍然没有运气。请参阅下面我的完整答案。可能的副本是第一个。我犯了错误3(没有这样的过程)。当直接传递信号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.