【问题标题】:Passing String Arguments to kill() in C将字符串参数传递给 C 中的 kill()
【发布时间】:2017-01-08 21:52:27
【问题描述】:

我正在寻找一种将参数作为字符串传递给 C 中的函数 kill (man 2 kill) 的方法,因为信号取决于操作系统。所以用户输入程序应该发送的内容(例如 SIGUSR1,..),我想提交它。通过 kill(pid,USR_INPUT);

我的错误

Invalid Argument

我在哪里使用它:

kill(pid,name);

非常感谢

【问题讨论】:

  • 你不能。 kill 函数只是不支持这样调用它。您阅读了手册页,因此您应该已经知道了。为什么你会忽略手册页所说的第二个参数需要是什么?
  • 所以我必须为每个操作系统实现这个。这似乎是错误的
  • @PeterNeuman 考虑到 kill() itself 不是 C 而是 POSIX,我不明白你怎么能期望它在“每个操作系统上”都能工作。
  • 在这个方法中: int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);如果我将它用作: int sigaction(SIGKILL,...
  • @PeterNeuman kill() 和 sigation() 做了完全不同的事情。所以,不确定你的比较。即便如此,它们都使用ints(不是字符串)的信号编号。

标签: c process signals kill


【解决方案1】:

这根本不可能。

kill(2) 不接受信号的字符串(第二个)参数。您必须处理作为字符串输入的信号听起来有点不确定。如果您确实需要这样做,您可以通过将字符串输入与您感兴趣的信号列表进行比较,将其转换为整数形式:

if (strcmp(sig_str, "SIGINT") == 0) {
   sig_num = SIGINT;
} else if (sig_str, "SIGTERM") == 0) {
   sig_num = SIGTERM;
} else if ...

...

kill(pid, sig_num);

【讨论】:

  • 好吧,如果我写的是 int Signal=SIGUSR1 而不是 char * Signal=SIGUSR;
猜你喜欢
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
相关资源
最近更新 更多