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 ...
随机推荐
- 关于 CentOS 自启动(服务、脚本)
/etc/init.d /etc/rc.local 其实是软连接,所以,实际上看 /etc/rc.d/ 这个文件夹就好了 rc.local 是自启动脚本 正常情况下,用户自定义的服务在 init.d ...
- scp命令报错(IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!)
使用scp命令移动某一服务器的文件到另外的服务器时报出一下错误: [root@bogon vm_sys1]# scp project.tar.gz root@172.31.0.90:/webdata/ ...
- Xcode打包framework脚本
参考文章: http://www.jianshu.com/p/1cb4c4fe5481 https://gist.github.com/cromandini/1a9c4aeab27ca84f5d79 ...
- CODE[VS]-寻找子串位置-字符串处理-天梯青铜
题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个字符串a和b 输出描述 ...
- android 控件自定义样式
一.按钮(Button) 方式1.存在.9图片或图片时 可在drawable文件夹下新建xml文件style_button_one.xml,代码如下 <?xml version=" ...
- 提示找不到xml配置文件
ClassPathXmlApplicationContext("applicationContext.xml")默认文件夹是resouerces,所以要把xml文件放在这个下面.
- 3.使用secureCRT连接PC,LINUX,开发板
1.设置secureCRT(可选项):http://www.linuxyw.com/linux/gongxiang/20130505/161.html 2.使用secureCRT远程登录linux 3 ...
- MySQL连接无法解析HOST主机名
#1042 - Can't get hostname for your address 使用IP链接或域名链接都可能遇到这个问题 解决办法: my.ini 或 my.cnf 末尾添加 skip-nam ...
- HDU 5884 Sort
二分,验证. 二分$k$,然后进行验证.有一个地方需要注意一下:如果$n$个数,每次合并$k$个,最后一次不能合$k$个,那么一开始需要补$0$之后再合并才是最优的.合并的时候用优先队列合并时间复杂度 ...
- 递归——CPS(二)
给出一个计算树深度的函数: function treeDepth(curtree) { if(curtree == null) return 0; else { var leftDepth = tre ...