确定进程是否挂起
Determine if a process has suspended
我尝试向特定进程发送SIGTSTP信号,但是如何确定该进程是否实际上使用C库函数或Linux中的系统调用挂起?
读取/proc/[pid]/stat
.
从手册页中,您可以从这个文件中获得进程的状态:
国家% c
字符串"RSDZTW"中的一个字符,其中R正在运行,S正在运行睡眠处于可中断等待状态,D处于不可中断等待状态磁盘睡眠,Z是僵尸,T是跟踪或停止(在一个信号上),W分页。
我知道这是一个旧的帖子,但是对于任何像我一样好奇的人!
简单的答案是只有一种静态的、一致的检查状态的方法,它来自/proc/[pid]/stat
,但是如果你想要尽可能少的架构依赖,并且不想这样做,你可以检查信号。
信号只能看到一次,所以你必须自己跟踪它,但waitpid
可以点击一个进程,看看是否有任何信号已经收到,因为你上次检查:
BOOL is_suspended;
int status;
pid_t result = waitpid(pid, &status, WNOHANG | WUNTRACED | WCONTINUED);
if(result > 0) { // Signal has been received
if (WIFSTOPPED(status)) {
is_suspended = true;
} else if (WIFCONTINUED(status)) {
is_suspended = false;
}
}
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何防止C++遗留代码中的挂起指针
- 为什么所有C++编译器都会崩溃或挂起此代码
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 构建挂起,即使是适度的文件大小
- 循环挂起迭代的 std::擦除 on std::list
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 从不同进程中的另一个线程挂起/恢复线程或进程
- Boost (Beast) websocket:同步写入挂起
- 为什么析构函数挂起
- 使用互斥会挂起程序
- 在C++和 Python 程序中使用命名管道的 IPC 挂起
- 设置变量时C++程序挂起
- SleepEx 是否保证在超时之前调用所有挂起的完成回调
- Emacs 是否可以在重新缩进缓冲区时将C++大括号转换为挂起
- QMutex是否需要是静态的,以便该类实例的其他线程调用知道要挂起它们的操作
- 如果 ssl::stream<tcp::socket 有挂起的操作,我是否不允许删除它>?
- 确定进程是否挂起
- 是否有可能检测到一个线程在Linux中被上下文切换[挂起]