从命令行发送信号进行处理

时间:2015-10-20 14:54:07

标签: linux signals

我读到了有关信号的信息,我知道如何从命令行向进程发送信号。只是做

kill -s signal pid(number)

知道进程的pid,然后

exit(0)

但是,如果可能的话,我想找到一种更具互动性和通用性的方法。

我想从命令行向特定进程发送信号。我不想打印我想要发出信号的过程的PID,而是使用一种方式让代码了解应该发出哪个过程信号。

除此之外,我想了解kill命令的作用。

  • 是否会扼杀发出信号的过程?
  • 是否会杀死被调用的进程?
  • 如果它杀死一个进程,则意味着它与do public static readonly DependencyProperty TextInUserControlProperty = DependencyProperty.Register("TextInUserControl", typeof(string), typeof(UserControl1)); public string TextInUserControl { get { return (string)GetValue(TextInUserControlProperty); } set { SetValue(TextInUserControlProperty, value); } } 类似,或者在发回信号后进程是否恢复?

3 个答案:

答案 0 :(得分:7)

据我了解你的问题,你想通过它的名字而不是它的PID来表示一个过程。这可以通过组合两个命令轻松实现:

kill -s signal $(ps -C executable)


  

是否会扼杀发出信号的过程?

kill 可以杀死。它不一定。

来自man kill

  

命令kill将指定的信号发送到指定的信号   流程          或过程组。

这意味着,kill命令用于**发送任何信号。

  

如果它杀死了一个过程,则意味着它与exit(0)类似,或者   信号发回后是否恢复过程?

来自here

  

SIGKILL信号用于立即终止程序。它   不能被处理或忽视,因此总是致命的。它是   也无法阻止此信号。

如果进程收到SIGKILL信号,它会立即终止(没有调用析构函数,不进行清理)。唯一不会终止的进程是不间断进程。

找到Linux上可用信号的完整列表here

答案 1 :(得分:0)

  

我想从命令行向特定进程发送信号。我不想打印我想要发出信号的过程的PID,而是使用一种方式让代码了解应该发出哪个过程信号。

killall命令符合这些条件,如果您可以使用它。它允许您根据名称指定要发出信号的进程。以下所有评论同样适用于通过killall发送信号并通过kill发送信号的效果。

  

除此之外,我想要了解kill命令的作用。

     

是否会扼杀发出信号的过程?

它传递指定的信号。就是这样。它可以传递的一些信号会起到杀死过程的作用。

  

是否会杀死它被称为“

”的过程?

它仅向您指定的进程发送信号。

  

如果它杀死一个进程,则意味着它与exit(0)类似,或者在发回信号后进程是否恢复?

进程可以处理某些信号而不会终止。当进程收到其中一个信号时,究竟会发生什么取决于进程。如果进程没有为其默认操作终止进程的信号提供处理程序,那么进程将死亡,永远不会恢复。效果有点像调用exit()函数或从main()返回,但终止是突然的,没有调用退出处理程序等。

答案 2 :(得分:0)

我更喜欢这个:

pkill -signal processname

这是我不时使用的一个具体例子:

pkill -USR1 Squeak

pkill - Wikipedia