|
|
1
7
我猜你是在谈论西格基尔,所以我只讨论那个信号。 当一个进程在另一个进程上引发sigkill时,sigkill被添加为受害者进程上的挂起信号,并且清除任何挂起的sigstop、sigstp、sigttou或sigttin信号。如果受害者停止或处于可中断睡眠状态,则会被唤醒(使其可运行)。 当受害者进程下次尝试从内核模式转到用户模式时,将检查挂起的信号。这就是找到挂起sigkill的地方,内核调用执行exit()而不是返回到用户模式。 从内核模式到用户模式的转换将在下一次调度进程时进行(除非进程处于不间断睡眠状态——这是臭名昭著的D状态)。如果它在一个不可预知的睡眠中,这个过程不会试图回到用户模式,直到它醒来。 |
|
|
2
5
用除sigkill以外的信号杀死它,只会导致发送一个信号。这可以被屏蔽或忽略,但是假设它没有被屏蔽(或者在它被屏蔽之后),那么它会中断程序的正常运行。 如果正在进行IPC类型的系统调用(例如,从套接字读取、select()、poll()、sleep()等),那么它将中断,并在errno中的eintr失败。正确的书面申请将在处理信号后重新发出呼叫。 然后,进程立即执行对信号处理程序的调用,该调用可能返回以允许处理继续,或者它可以调用longjmp(在C中),或者它可以退出进程,这通常是默认的。 Sigkill是完全不同的,以上都没有发生。相反,它只是退出系统调用(如果允许进程读取它,那么可能会将eintr留在errno中),然后导致任务立即退出,而不可能处理它。 但我认为它们中的任何一个都会等待“d”“不间断睡眠”状态结束。这通常类似于一个阻塞的磁盘读取、页面错误请求加载或其他。 |
|
|
3
1
运行kill只是向进程(术语)发送一个信号,要求它很好地终止。如果它不回应,那就是生意。但是,您可以选择发送 several different signals 命令它离开。你可能感兴趣的是杀戮-9(sigkill),它可以杀死它而不给它一个选择。 (编辑:正如评论中指出的,术语是默认值) |
|
|
4
0
在UNIX系统中,杀戮(而不是中断)通常由sigkill信号执行(ctrl-c发送sigint)。 这些系统通常提供一种通过信号中断阻塞系统调用的方法,该方法允许信号处理程序在不等待系统调用完成的情况下执行(这就是EINTR错误发挥作用的地方)。所以 正常地 ,呼叫刚刚取消,不等待完成。 |
|
|
5
0
每个进程可以接收多种类型的信号,可以忽略这些信号进行处理,但很少有信号没有传递给进程,但“进程调度程序”会终止进程…. 请参阅此了解更多解释 http://www.linux-tutorial.info/modules.php?name=MContent&pageid=289 |
|
|
diviquery · 每个CPU阵列的BPF是否未初始化为零? 2 年前 |
|
|
Shazer · 在页面缓存层Android上测量执行时间 2 年前 |
|
|
joe kiya · 高cpu使用率:scsi_eh_1 3 年前 |
|
|
grandzello · 设备树:无pinctrl句柄 3 年前 |
|
Fnr · Linux内核配置官方文档 8 年前 |
|
|
Zohar81 · 在网络上设置双机内核调试 8 年前 |