我读到了有关信号的信息,我知道如何从命令行向进程发送信号。只是做
kill -s signal pid(number)
知道进程的pid,然后
exit(0)
但是,如果可能的话,我想找到一种更具互动性和通用性的方法。
我想从命令行向特定进程发送信号。我不想打印我想要发出信号的过程的PID,而是使用一种方式让代码了解应该发出哪个过程信号。
除此之外,我想了解kill命令的作用。
public static readonly DependencyProperty TextInUserControlProperty =
DependencyProperty.Register("TextInUserControl",
typeof(string),
typeof(UserControl1));
public string TextInUserControl
{
get { return (string)GetValue(TextInUserControlProperty); }
set { SetValue(TextInUserControlProperty, value); }
}
类似,或者在发回信号后进程是否恢复?答案 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)