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