【问题标题】:What happens when a program receives SIGTSTP signal当程序接收到 SIGTSTP 信号时会发生什么
【发布时间】:2016-01-24 20:02:12
【问题描述】:

我用C写了一个程序,我需要处理ctrl + z和对应的信号SIGTSTP和SIGCONT。

收到信号后我的变量和进程会发生什么?
通过信号处理器signal(SIGCONT, &sig_handler);处理信号后,我的进程会发生什么?

【问题讨论】:

  • 操作系统/内核处理所有这些。它保存并恢复正在运行的进程的状态。

标签: c unix signals


【解决方案1】:

有(至少)三种可能的情况:

  • 进程当前正在用户空间中运行:

    在这种情况下,进程被抢占(类似于多任务处理时时间片用完时的方式)并且在恢复之前不会考虑重新调度。

  • 进程当前正在等待系统调用:

    通常系统调用被中断并且进程在恢复之前不会被考虑调度。当它恢复时,一些系统调用返回-EINTR 并且必须重新启动。一些系统调用会自动重新启动。

  • 进程正在等待磁盘(状态 D),例如等待缓冲区/分页:

    信号被设置为挂起,但直到操作完成才被传递。之后就和上面的一种情况一样。

通常这一切对流程本身来说都是相当透明的。

SIGTSTPSIGSTOP 的默认操作也是如此(但是后者不能被捕获或忽略)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2019-06-05
    • 2020-02-27
    • 2021-12-13
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多