【发布时间】:2016-04-25 18:03:07
【问题描述】:
我正在尝试用 C++ 编写一个程序,该程序将信号发送到另一个程序,就像在 Linux 中使用 kill 命令一样,但我似乎遇到了一些转换问题。正如我所看到的,我不能只通过终端将信号作为字符串(SIGINT、SIGUSR1 等)传递并在程序内部轻松转换它们。我也无法通过将他们作为他们的通讯员ints(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.
至于当我尝试使用字符串时,我找不到可以正常工作的转换。
提前致谢。
【问题讨论】:
-
你从
kill()得到的errno是什么? -
ESRCH 3 /* No such process */所以我想我向错误的 pid 发送信号。通过更正它,我让它通过整数工作,但在传递字符串时仍然没有运气。 -
在下面查看我的完整答案。
标签: c++ linux signals system-calls