我有一个程序要求它暂停和恢复另一个程序。为此,我使用kill函数,使用代码: -
kill(pid, SIGSTOP); // to pause
kill(pid, SIGCONT); // to resume
或者从类似
的命令行kill -STOP <pid>
kill -CONT <pid>
我可以使用来自this code的Mac OS X Internals跟踪线程的内容。
如果程序暂停并立即恢复,则线程状态可以显示为 UNINTERRUPTIBLE 。大多数情况下,他们报告为 WAITING ,这并不奇怪,如果一个线程正在运行,它将显示为RUNNING。
我不明白的是当我暂停一个程序并查看线程的状态时,它们仍显示为 WAITING 。我原本预计他们的状态要么是停止,要么是 HALTED
有人可以解释为什么他们仍然显示为等待,他们何时会停止或 HALTED 。另外,是否有另一个结构显示程序的状态,并以这种方式停止其线程?
答案 0 :(得分:1)
在您的情况下显示“Waiting”,因为您没有终止程序而是暂停它,当程序由于某些运行时错误而立即停止工作时通常会发生Stopped或Halted状态。就你的第二个问题而言,我认为没有其他结构可以显示该计划的状态。干杯
答案 1 :(得分:0)
在研究和试验可用的结构之后,我发现可以通过查看进程暂停计数来显示程序的状态。这是我的解决方案: -
int ProcessIsSuspended(unsigned int pid)
{
kern_return_t kr;
mach_port_t task;
mach_port_t mytask;
mytask = mach_task_self();
kr = task_for_pid(mytask, pid, &task);
// handle error here...
char infoBuf[TASK_INFO_MAX];
struct task_basic_info_64 *tbi;
int infoSize = TASK_INFO_MAX;
kr = task_info(task, TASK_BASIC_INFO_64, (task_info_t)infoBuf, (mach_msg_type_number_t *)&infoSize);
// handle error here....
tbi = (struct task_basic_info_64 *) infoBuf;
if(tbi->suspend_count > 0) // process is suspended
return 1;
return 0;
}
如果suspend_count为0,程序正在运行,否则它处于暂停状态,等待恢复。