北京经济技术开发区建设局网站,温州网站制作策划,深圳专业商城网站制作公司,汇通网做期货的网站做期货的网站Linux进程编程(PS: exec族函数、system、popen函数)_linux popen函数会新建进程吗-CSDN博客
execvp函数详解_如何在C / C 中使用execvp#xff08;#xff09;函数-CSDN博客
C语言的多进程fork()、函数exec*()、system()与popen()函数_c语言 多进程-CSDN博客
Linux---fork…Linux进程编程(PS: exec族函数、system、popen函数)_linux popen函数会新建进程吗-CSDN博客
execvp函数详解_如何在C / C 中使用execvp函数-CSDN博客
C语言的多进程fork()、函数exec*()、system()与popen()函数_c语言 多进程-CSDN博客
Linux---fork函数和exec函数_fork exec-CSDN博客 #include unistd.hint main() {pid_t childPid fork(); //创建子进程if (childPid -1) {perror(fork);return 1;} else if (childPid 0) {// 子进程的代码char* args[] {/bin/sh, -c, logcat | grep, NULL};int result execvp(args[0], args);if (result -1) {perror(execvp);exit(EXIT_FAILURE);}} else {// 父进程的代码waitpid(childPid, NULL, 0); //等待子进程结束}return 0;
} #include iostream
#include stdio.h
#include unistd.h // for getpid() function
#include sys/wait.h
#include string.h
#include chrono
#include thread
#include unistd.h#include sys/types.h
#include sys/stat.h
#include fcntl.hint main() {char *p (char*)malloc(5000);strcpy(p, ifsddsffdsdsdfsfdssdffds);pid_t pid fork(); // 创建子进程if (pid 0) {int status;// wait(status); // 等待子进程结束std::this_thread::sleep_for(std::chrono::milliseconds(3000));// std::string cmd_str kill -9 std::to_string(pid);//pkill -TERM -P 27888std::string cmd_str pkill -TERM -P std::to_string(pid);auto ret system(cmd_str.c_str());std::cout Child process ID is: pid std::endl;} else if (pid 0) {char *a (char*)malloc(100);// std::this_thread::sleep_for(std::chrono::milliseconds(3000));#if 1std::string cmd_log /home/zeekr/code/test/test;// 关闭标准输入、输出和错误流close(STDIN_FILENO);close(STDOUT_FILENO);close(STDERR_FILENO);// 打开要写入的文件int fd open(output.txt, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);// 设置新的标准输出为指定文件dup2(fd, STDOUT_FILENO);// 执行需要重定向的命令// execlp(/bin/ls, ls, -la, NULL);// execlp(cmd_log.c_str(), test, 3, NULL);// execl(cmd_log.c_str(),test, 3, a.txt 21,NULL);char* args[] {/bin/sh, -c, logcat | grep xxx, NULL};int result execvp(args[0], args);if (result -1) {perror(execvp);exit(EXIT_FAILURE);}// execl(/bin/ls, ls, -l, NULL);perror(Child failed to exec ls);//execl后面的代码都不会执行了printf(chlid end\n);exit(0);//让子进程到这里就结束#elif 0std::string cmd_log top a.txt 21 ;auto status system(cmd_log.c_str());printf(system: %d\n, status);std::this_thread::sleep_for(std::chrono::milliseconds(30000));printf(exit(EXIT_SUCCESS);\n);exit(EXIT_SUCCESS);#elif 0std::string cmd_log top a.txt 21 ;FILE* pipe popen(cmd_log.c_str(), r); // 这里以ls命令为例也可以根据需求修改成其他命令或脚本if (pipe nullptr) {std::cout Failed to create child process. std::endl;return -1;}// 子进程部分char buffer[256];while (!feof(pipe)) {fgets(buffer, sizeof(buffer), pipe);printf(result: %s\n, buffer);}pclose(pipe); // 关闭管道printf(pclose(pipe); : %s\n, buffer);exit(EXIT_SUCCESS);
#endif} else {std::cerr Fork failed! std::endl;return -1;}return 0;
}