/data/temp&");我想要 pid 而不使用 ps 命令-6ren"> /data/temp&");我想要 pid 而不使用 ps 命令-我在我的 C 代码中使用此调用 system("logcat -v time >/data/temp&");我想要在不使用 ps 命令的情况下创建的进程的 pid,无论如何这都没有帮助,因为它不会启动-6ren">
gpt4 book ai didi

android - 我正在执行系统 ​​("kmsg -v time >/data/temp&");我想要 pid 而不使用 ps 命令

转载 作者:行者123 更新时间:2023-11-30 17:50:09 25 4
gpt4 key购买 nike

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

最佳答案

我建议您自己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");
}

关于android - 我正在执行系统 ​​("kmsg -v time >/data/temp&");我想要 pid 而不使用 ps 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17430704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com