关于signals的一些问题

这里有一些关于signals的questions和answers。重要的不是获得这些问题的正确答案,而是你从中可以学习到某些东西。

在Unix中可以使用哪个命令发送signals?

kill,你可以使用kill不仅可以发送杀死进程的信号,可以发送任何信号。比如:

$ kill -STOP 1234

这表示发送SIGSTOP信号给PID为1234的程序。用来发送信号的系统调用也叫kill

一个进程可以向其他任何进程发送信号么?

不可以!

要发送信号,两个进程需要在同一用户身份运行下(或者root用户)。否则,你可以杀死root用户运行的程序,这是很糟糕的!

当你运行kill PID时,该进程会发生什么?

该进程立即退出。

不带任何参数的kill发送SIGTERM信号。 进程获得SIGTERM时的默认立即退出。

运行kill PID时,进程可以不退出吗?

可以!

任何进程都可以为特定信号设置信号处理程序功能(例如SIGINT),即捕捉到该信号则执行处理函数中的步骤。也可以使用预定义的信号处理方式(例如SIG_IGN表示“忽略”)或运行自定义函数。

为什么在终端中按Ctrl + C会终止前台进程?

它发送了一个信号!

在终端中按下Ctrl + C,内核将会发送SIGINT信号到正在运行的前台进程。

运行kill -9 PID,该进程除了立即退出可以选择其他方式处理么?

不可以!

kill -9发送SIGKILL信号,这个信号不能够被阻塞。这是一种让进程立即退出的好方法。SIGSTOP信号也不能够被阻塞。

kill -9能保证一定杀死一个进程吗?

不能保证!

对一个进程进行kill -9,该进程不能捕获SIGKILL信号,也不能被阻塞。但有时在Linux上,它们在执行I/O或其他操作时会卡住,无法杀死。 这种不可杀死的状态称为“不间断睡眠”。

向一个进程发送一个信号,进程会等待当前函数执行完么?

默认情况下不会!

默认情况下,信号不等待任何东西,它们在执行过程中的任意点中断该过程。如果你只想在方便处理的时候中断它,则可以将进程的信号掩码设置为阻止信号,然后在想要接收信号时运行sigwait

kill PID和Ctrl+C发送的信号相同么?

不相同!

kill PID发送的是SIGTERM信号,但是Ctrl+C发送的是SIGINT信号。

用SIGSTOP信号停止一个进程会导致该进程退出么?

不会!

停止一个进程就像按下了暂停键,该进程将被挂起,它停止使用CPU,但所有进程当前的状态保持不变。你可以稍后恢复它,它会在停下来的地方重新执行。如果你在终端中运行了某个程序(例如vim),则可以通过按Ctrl + Z向其发送SIGTSTP(默认情况下,该程序也会被挂起)。

SIGSTOP和SIGTSTP的区别是什么?

两种信号都用于在停止进程,该进程可以通过SIGCONT信号恢复。 它们之间的主要区别是:

  • SIGSTOP,通常是用kill -STOP pid的方式发送信号,而SIGTSTP通常用键盘Ctrl + Z来发送信号。
  • SIGSTOP信号不能阻塞,SIGTSTP可以被阻塞。

信号除了杀死/停止进程,还有什么用途?

SIGUSR1SIGUSR2SIGHUP默认情况下会终止进程,但是进程有时会使用这些信号来重新加载配置或打印出调试信息。 例如,如果向nginx发送一个SIGHUP,它将重新加载其配置。

参考:

questions about signals

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值