0

我在我的 C 代码中使用这个调用system("logcat -v time >/data/temp&"); 我想要创建进程的 pid 而不使用ps命令,这无论如何都无济于事,因为它不会启动一个名为 kmsg 的进程。 system("echo $!>/data/pid_file");也无济于事,它只是将空值插入/data/pid_file。谁能给我一种方法来使用这两个命令。我已经使用了几种方法来做到这一点,所以请尝试给出一种积极有效的方法。

4

1 回答 1

0

我会建议你fork自己的过程。然后你就会知道pid。在此示例child_pid中将保存您想要的 pid。

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

-

pid_t child_pid = fork();

if (!child_pid) {
    // child goes here

    char * args[] = {"logcat", "-v", "time", NULL};

    int fd = open("/data/temp", O_WRONLY | O_CREAT | O_TRUNC);

    if (!fd) {
        perror("open");
        exit(EXIT_FAILURE);
    }

    // map fd onto stdout
    dup2(fd, 1);

    // You will probably want to disconnect stdin and stderr
    // So we will redircet them to /dev/null
    fd = open("/dev/null", O_RDWR);
    if (!fd) {
        perror("open");
        exit(EXIT_FAILURE);
    }

    // disable stdin
    dup2(fd, 0);
    // disable stderr
    dup2(fd, 2);

    execvp(*args, args);

    // will only return if exec fails for whatever reason
    // for instance file not found

    perror("exec");

    exit(EXIT_FAILURE);
}

// parent process continues here

if(child_pid == -1) {
    // can happen if you have reached process limit (ulimit -u) or are out of memory
    perror("fork");
}
于 2013-07-02T16:30:31.870 回答