2015-10-20 109 views
2

我读了关于信号,我知道如何从命令行发送信号到进程。只要做到发送信号从命令行处理

ps -C executable 

知道进程的PID,然后

kill -s signal pid(number) 

不过,我想找到一个更具交互性和通用的方式,如果能够做到这一点。

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

除此之外,我想了解kill命令的功能。

  • 它是否会杀死信号的过程?
  • 它会杀死它被调用的进程吗?
  • 如果它杀死一个进程,这意味着它类似于做exit(0),或者该过程在信号被发回后是否恢复?
+0

那么你希望*发送信号的形式是什么?你可以通过一个例子来指定它吗? –

+0

@EugeneSh。我会说在代码中运行一个函数的命令是完美的。我可以创建一个函数来发送信号,而不会出现问题。我仍然想知道kill尽管 –

回答

6

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

kill -s signal $(ps -C executable) 


是否杀死进程的信号?

kill可以杀死。它不一定。

man kill

命令kill发送指定信号,以指定 过程 或过程组。

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

如果它杀死的过程就意味着它类似于做exit(0),或 没有信号后处理简历发送回?

here

SIGKILL该信号用于导致立即程序终止。它不能被处理或忽略,因此总是致命的。这是 也不可能阻止这个信号。

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


发现Linux上可用信号的完整列表here

+0

有什么作用,所以我可以在没有问题的情况下使用kill,并且它不会暂停或终止任何进程,只要我不使用SIGKILL信号? –

+0

然而,我有3个过程,所以我认为你的答案建议会将信号发送给它们中的所有3个,而不是1个具体的 –

+0

@AndréAlmeida'kill'只发送信号。还有其他的信号,比如'SIGSTOP'或'SIGTERM',它们停止/终止程序。您需要查看每个信号的功能,以确定它的功能。 – Downvoter

0

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

killall命令满足这些标准,如果你有它可用。它允许您指定进程(es)根据其名称发出信号。以下所有意见同样适用于通过killall传递信号并通过kill传递信号的效果。

除此之外,我想了解kill命令的功能。

它会杀死信号的过程吗?

它传递指定的信号。而已。它可以提供的一些信号将会导致杀死进程。

它会杀死它被调用的进程吗?

它仅向您指定的过程传递信号。

如果它杀死了一个进程,这意味着它类似于退出(0),或者在信号被发送回来后进程恢复吗?

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