5

プロセスの pid が与えられた場合、そのプロセスが (SIGSTOP で) 一時停止されているか実行中かを判断するにはどうすればよいですか?

/procOS X を使用しているため、ディレクトリがありません。

4

3 に答える 3

2

それは素晴らしい答えではありませんが、それは答えです.. ps aux (プログラム内から) を実行し、STAT 列が T (停止) であるかどうかを確認できます。マウンテンライオンで確認しました。

それがどのようにそれを理解するのかわかりません。

kvm_* 関数に近づいていると思います:

Cを使用してOS Xで他のプロセスのargvを取得する

また

kvm_getargv()

http://www.daemon-systems.org/man/kvm_getproc2.3.html および PS のソース: http://bxr.su/o/bin/ps/ps.c

于 2013-06-09T04:00:42.890 に答える
2

これはあなたがそれを行う方法です:

#include <stdio.h>
#include <sys/sysctl.h>
#include <stdlib.h>
#include <string.h>

#define IS_RUNNING(proc) ((proc->kp_proc.p_stat & SRUN) != 0)

#define ERROR_CHECK(fun) \
    do { \
        if(fun) { \
            goto ERROR; \
        }\
    } while(0)

struct kinfo_proc *proc_info_for_pid(pid_t pid) {
    struct kinfo_proc *list = NULL;

    int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid};
    size_t size = 0;

    ERROR_CHECK(sysctl(mib, sizeof(mib) / sizeof(*mib), NULL, &size, NULL, 0));

    list = malloc(size);
    ERROR_CHECK(sysctl(mib, sizeof(mib) / sizeof(*mib), list, &size, NULL, 0));

    return list;

ERROR:
    if(list) {
        free(list);
    }
    return NULL;
}

int main() {
    pid_t pid = 1000;
    struct kinfo_proc *proc_info = proc_info_for_pid(pid);
    if(proc_info) {
        printf("Is running: %d\n", IS_RUNNING(proc_info));
    } else {
        printf("Could not stat process!");
        return 1;
    }
    return 0;
}
于 2013-06-09T04:32:35.620 に答える
0

プロセスの状態man psについて読むことができますT

T 停止したプロセスをマークします。

プロセスが停止しているかどうかを判断するために、実行すると列にフラグps jが表示されます。Tstat

現在停止しているすべてのプロセスを表示するには、Bash で次を実行しますjobs -s(「参考文献」を参照help jobs)。それらを殺すには、次を実行します。kill $(jobs -sp).

これらのプロセスが現在のシェルに接続されていない場合、停止しているすべてのプロセスを表示するには、次のコマンドが役立つ場合があります。

ps wuax | awk '$8 ~ "T"'

停止したすべてのプロセスを再開するコマンドは次のとおりです。

kill -CONT $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')

代わりにこれらのプロセスを強制終了するには-CONT-9.

プロセスを一時停止した場合、プロセスが停止していると表示されないTため ( で)、プロセスを再開するには、代わりに次のコマンドを使用します。

pkill -CONT -u $UID

または特定のプロセス (Chrome など) の場合は、次を試してください。

kill -CONT $(pgrep Chrome)
于 2016-03-24T23:57:04.723 に答える