拜托,建议为好替代popen()
执行shell命令,然后读取输出。
编辑:替代必须是无fork()
调用。 因为我的服务器已经花费了太多的内存。 随后ffmpeg
也需要内存和进程大小增加! 而我得到的问题fork()
每次内存权重的服务器。
拜托,建议为好替代popen()
执行shell命令,然后读取输出。
编辑:替代必须是无fork()
调用。 因为我的服务器已经花费了太多的内存。 随后ffmpeg
也需要内存和进程大小增加! 而我得到的问题fork()
每次内存权重的服务器。
如果担心复制分叉当父进程的内存,那么你需要使用vfork()
- “叉”不复制父进程的内存,但是需要的分叉过程中立即发出的一个特殊版本execve()
。
这是我在学校的教导:
int main(int argc, char *argv[]) {
int pipefd[2];
pid_t cpid;
char buf;
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
cpid = fork();
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0) {
/* Child reads from pipe */
close(pipefd[1]);
//make the standard input to be the read end
pipefd[0] = dup2(pipefd[0], STDIN_FILENO);
system("more");
write(STDOUT_FILENO, "\n", 1);
close(pipefd[0]);
} else {
/* Parent writes argv[1] to pipe */
close(pipefd[0]);
/* Close unused read end */
pipefd[1] = dup2(pipefd[1], STDOUT_FILENO);
system("ps aux");
/* Wait for child */
wait(NULL);
exit(EXIT_SUCCESS);
}
return 0;
}
这会生成两个过程,一个执行“的ps aux”和进给输出到运行的“更多”的另一个。