Linux启动新进程的几种方法及比较[转]
- #include <stdlib.h>
- int system (const char *string);
- #include <stdlib.h>
- #include <stdio.h>
- int main()
- {
- printf("Running ps with system\n");
- //ps进程结束后才返回,才能继续执行下面的代码
- system("ps au");// 1
- printf("ps Done\n");
- exit(0);
- }
- #include <unistd.h>
- char **environ;
- int execl (const char *path, const char *arg0, ..., (char*)0);
- int execlp(const char *file, const char *arg0, ..., (char*)0);
- int execle(const char *path, const char *arg0, ..., (char*)0, char *const envp[]);
- int execv (const char *path, char *const argv[]);
- int execvp(cosnt char *file, char *const argv[]);
- int execve(const char *path, char *const argv[], char *const envp[]);
- char *const ps_envp[] = {"PATH=/bin:usr/bin", "TERM=console", 0};
- char *const ps_argv[] = {"ps", "au", 0};
- execl("/bin/ps", "ps", "au", 0);
- execlp("ps", "ps", "au", 0);
- execle("/bin/ps", "ps", "au", 0, ps_envp);
- execv("/bin/ps", ps_argv);
- execvp("ps", ps_argv);
- execve("/bin/ps", ps_argv, ps_envp);
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- printf("Running ps with execlp\n");
- execlp("ps", "ps", "au", (char*)0);
- printf("ps Done");
- exit(0);
- }
- #include <sys/type.h>
- #include <unistd.h>
- pid_t fork();
- #include <unistd.h>
- #include <sys/types.h>
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- pid_t pid = fork();
- switch(pid)
- {
- case -1:
- perror("fork failed");
- exit(1);
- break;
- case 0:
- //这是在子进程中,调用execlp切换为ps进程
- printf("\n");
- execlp("ps", "ps", "au", 0);
- break;
- default:
- //这是在父进程中,输出相关提示信息
- printf("Parent, ps Done\n");
- break;
- }
- exit(0);
- }
- #include <sys/types.h>
- #include <sys/wait.h>
- pid_t wait(int *stat_loc);
- pid_t waitpid(pid_t pid, int *stat_loc, int options);
- #include <unistd.h>
- #include <sys/types.h>
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- pid_t pid = fork();
- int stat = 0;
- switch(pid)
- {
- case -1:
- perror("fork failed");
- exit(1);
- break;
- case 0:
- //这是在子进程中,调用execlp切换为ps进程
- printf("\n");
- execlp("ps", "ps", "au", 0);
- break;
- default:
- //这是在父进程中,等待子进程结束并输出相关提示信息
- pid = wait(&stat);
- printf("Child has finished: PID = %d\n", pid);
- //检查子进程的退出状态
- if(WIFEXITED(stat))
- printf("Child exited with code %d\n", WEXITSTATUS(stat));
- else
- printf("Child terminated abnormally\n");
- printf("Parent, ps Done\n");
- break;
- }
- exit(0);
- }
Linux启动新进程的几种方法及比较[转]的更多相关文章
- Linux启动新进程的几种方法汇总
有时候,我们需要在自己的程序(进程)中启动另一个程序(进程)来帮助我们完成一些工作,那么我们需要怎么才能在自己的进程中启动其他的进程呢?在Linux中提供了不少的方法来实现这一点,下面就来介绍一个这些 ...
- Linux启动新进程的几种方法及比较
有时候,我们需要在自己的程序(进程)中启动另一个程序(进程)来帮助我们完成一些工作,那么我们需要怎么才能在自己的进程中启动其他的进程呢?在Linux中提供了不少的方法来实现这一点,下面就来介绍一个这些 ...
- Linux启动新进程的三种方法
程序中,我们有时需要启动一个新的进程,来完成其他的工作.下面介绍了三种实现方法,以及这三种方法之间的区别. 1.system函数-调用shell进程,开启新进程system函数,是通过启动shell进 ...
- Linux中Kill进程的N种方法
常规篇: 首先,用ps查看进程,方法如下: $ ps -ef …… smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx ...
- linux 下隐藏进程的一种方法
前言 本文所用到的工具在 https://github.com/gianlucaborello/libprocesshider 可以下载 思路就是利用 LD_PRELOAD 来实现系统函数的劫持 LD ...
- Linux之Kill进程的N种方法
常规篇: 首先,用ps查看进程,方法如下: $ ps -ef …… smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx ...
- linux下查询进程占用的内存方法总结
linux下查询进程占用的内存方法总结,假设现在有一个「php-cgi」的进程 ,进程id为「25282」.现在想要查询该进程占用的内存大小.linux命令行下有很多的工具进行查看,现总结常见的几种方 ...
- python实现Linux启动守护进程
python实现Linux启动守护进程 DaemonClass.py代码: #/usr/bin/env python # -*- coding: utf-8 -*- import sys import ...
- Linux 下操作GPIO(两种方法,驱动和mmap)(转载)
目前我所知道的在Linux下操作GPIO有两种方法: 1.编写驱动,这当然要熟悉Linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据io ...
随机推荐
- Base64加密与解密
import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder; // 将 str进行 BASE64 编码 public static Stri ...
- C#笔记(一)常量
常量必须在声明时初始化 常量的值必须能在编译时用于计算.因此,不能用从一个变量中提取的值来初始化常量. 常量总是静态的.但注意,不必(实际上,是不允许)在常量声明中包含修饰符static .
- dirty cow exp
公司搞底层的改了一下,说做到了几个不死机 /* * (un)comment correct payload first (x86 or x64)! * * $ gcc cowroot.c -o cow ...
- [Jenkins]admin用户登陆,提示登陆无效(之前登陆OK,三天没有登陆,突然提示登陆无效,重启无法解决)的解决方法
问题出现现象: 系统一直正常,突然某天登陆,提示用户无效,无法登陆成功. 问题分析过程: 1.查看日志:/var/log/jenkins/jenkins.log(通过ps -elf | grep je ...
- hdu1029
#include<iostream>#include<string.h>using namespace std;int main(){ int n,i; int t; int ...
- 让webstorm支持新建.vue文件
1. 首先安装vue插件,安装方法: file-->setting --> plugin ,点击plugin,在内容部分的左侧输入框不用输入任何东西,直接点击下图中的按钮. 如下图所 ...
- Pass和ClassPath变量配置
1.pass环境变量配置的是可执行性文件bin目录,是为了在任意盘符下都可以运行javac.exe和java.exe所配置的. 2.classpath环境变量记录的是java类运行文件所在的目录,一般 ...
- google谷歌翻译插件-网页一键翻译
上个月转载的一篇博文,是推荐的四款非常实用的翻译插件,这几天看这个chrome插件网首页有新增了一个google谷歌翻译插件.我能说实话,这款插件比之前推荐的4款翻译插件更好用吗?也不能完全说是更好用 ...
- Conversion to Dalvik format failed with error 1(android)
1.如果不修改android sdk版本,则使用project clean 命令作用于某工程即可. (该处理方式只是在高版本中兼容了低版本工程,未真正意义上的升级) 2.如果修改android sdk ...
- c3p0私有属性checkoutTimeout设置成1000引发的调试错误:
checkoutTimeout设置成1000引发的调试错误: org.mybatis.spring.MyBatisSystemException: nested exception is org.ap ...