我试图用C ++编写程序,用与Linux中kill
命令相同的方式向另一个程序发送信号,但似乎我遇到了一些转换问题。在我看来,我不能通过终端将信号作为字符串(SIGINT
,SIGUSR1
等)传递,并在程序内轻松转换。我也不能通过将他们作为通讯员int
(2,30等)并直接使用系统调用来实现我的目标。这是我的代码:
#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 :(得分:1)
导致错误的两个最可能的原因是:
pid
; 要确定它是什么,请在调用errno
失败后打印并检查kill()
的值。有关errno
可以获得的kill()
值列表,请参阅man page。
关于将信号名称转换为数字,请参阅How to convert signal name (string) to signal code?(简而言之,您很可能必须拥有自己的信号名称和相应数字表。)