gpt4 book ai didi

c++ - 信号发送器转换

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:40 24 4
gpt4 key购买 nike

我正在尝试用 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.

至于当我尝试使用字符串时,我找不到可以正常工作的转换。

提前致谢。

最佳答案

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

  • 不存在具有给定 pid 的进程;
  • 您无权向进程发送信号。

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

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

关于c++ - 信号发送器转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36847887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com