unix/linux进程详解


启动新进程
 stdlib.h
int
system(const char *string)
which
equals to “sh -c string”

替换进程映像
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(const char *file, char *const argv[]);
这两个函数的第二个参数是一个字符串数组,新程序在启动时,会把在argv[]数组中给定的参数传递给main函数。
int
execve(const char *filename, char *const argv[],
 char *const
envp[]);
//int
execvpe(const char *file, char *const argv[],
char *const envp[]);

以字母p结尾的函数通过搜索PATH环境变量来查找新程序的可执行文件路径。若可执行文件不在PATH定义的路径中,就需要把包括目录在内的使用绝对路径的文件名作为参数传递给函数。
全局变量environ可以把一个值传递到新的程序环境中。
execle和execve可以通过参数envp传递字符串数组作为新程序的环境变量。

由exec类函数启动的进程,他的参数表和环境加在一起的总长度是有限的ARG_MAX(posix
> 4096B,linux = 128kb)。错误返回errno

复制进程映像
让进程同时执行多个函数,可以使用线程或从源程序中创建一个完全分离的进程(类似于init)
fork复制当前进程,创建出来的新进程和原进程几乎一样,但新进程有自己的数据空间,环境,fd。和exec函数结合使用。

sys/types.h
unistd.h

pid_t
fork(void);
fork失败返回-1,通常因为父进程所用有的子进程数目超限(CHILD_MAX),此时errno被设置为EAGAIN;若进程表没有足够的空间用于创建新的表单或虚拟内存不足,errno为ENOMEM








				
时间: 2024-10-26 00:45:23

unix/linux进程详解的相关文章

Linux进程详解

本文实际上是 "UNIX环境高级编程" 的读书笔记. 所以许多细节并没有表述出来, 想要刨根问底的同学建议再看看原书. 之所以把读书笔记贴到博客上, 出于两个目的: 1. 加深自己的学习效果. 2. 提供一个快速浏览的方式. 本文提到的技术在下面的环境中实际验证过: Linux version 2.6.18-164.el5 x86_64 GNU/Linux (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) 程序和进程 程序是指磁盘上的可执行

Linux 进程详解

进程:正在运行的程序(每个运行着的程序实例就构成一个进程) 一般来说,Linux系统会在进程之间共享程序代码和系统函数库,所以在任何时刻内存中都只有代码的一份副本.(在任何时刻内存中都只有代码的一份副本???) 程序代码和系统函数库可以被多个进程安全的共享. 举例: 1. 程序代码可以共享:多个用户可以调用同一个程序代码(同一个函数) 2. 系统函数库也可以被共享:不管有多少个正在运行的程序要调用printf函数,内存中只要有它的一份副本即可. 每个进程都会被分配一个唯一的数字编号,我们称之为进

Linux学习之守护进程详解

Linux系统守护进程详解                                                              ---转自:http://yuanbin.blog.51cto.com/363003/107306/,多谢分享 不要关闭下面这几个服务: acpid, haldaemon, messagebus, klogd, network, syslogd 1. NetworkManager, NetworkManagerDispatcher NetworkM

Linux 目录详解 树状目录结构图

1.树状目录结构图 2./目录 目录 描述 / 第一层次结构的根.整个文件系统层次结构的根目录. /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如:cat.ls.cp,和/usr/bin类似. /boot/ 引导程序文件,例如:kernel.initrd:时常是一个单独的分区[6] /dev/ 必要设备, 例如:, /dev/null. /etc/ 特定主机,系统范围内的配置文件. 关于这个名称目前有争议.在贝尔实验室关于UNIX实现文档的早期版本中,/etc 被称为

Linux信号详解

Linux信号详解 一 信号的种类 可靠信号与不可靠信号, 实时信号与非实时信号 可靠信号就是实时信号, 那些从UNIX系统继承过来的信号都是非可靠信号, 表现在信号 不支持排队,信号可能会丢失, 比如发送多次相同的信号, 进程只能收到一次. 信号值小于 SIGRTMIN的都是非可靠信号. 非可靠信号就是非实时信号, 后来, Linux改进了信号机制, 增加了32种新的信号, 这些信 号都是可靠信号, 表现在信号支持排队, 不会丢失, 发多少次, 就可以收到多少次. 信号值 位于 [SIGRTM

Linux procfs详解

1.0 proc文件系统总览在类Unix系统中体现了一种良好的抽象哲学,就是几乎所有的数据实体都被抽象成一个统一的接口--文件来看待,这样我们就可以用一些简单的基本工具完成大量复杂的操作.在Linux中存在着一类特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs.devfs.sysfs和procfs.而procfs就是其中应用最广泛的一种伪文件系统.procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就

Linux内存详解

--Linux内存详解 -----------------2014/05/24 Linux的内存上表现的不像windows那么直观,本文准备详细的介绍一下Linux的内存. 请看这下有linux命令free和vmstat输出的内存信息. Mem行used表示已经分配的内存,free表示尚未分配的内存,shared表示共享内存. 计算方法:缓存统计行free=Mem(free)+Mem(buffers)+Mem(cached) 共享内存 对于共享内存(Shared memory),主要用于在UNI

Linux指令详解useradd groupadd passwd chpasswd chage 密码修改

创建用户.设置密码.修改用户.删除用户: useradd testuser 创建用户testuser passwd testuser 给创建的用户testuser设置密码 说明:新创建的用户会在/home下创建一个用户目录testuser usermod --help 修改用户这个命令的相关参数 userdel testuser 删除用户testuser rm -rf testuser 删除用户testuser所在目录 上面的几个命令只有root账号才可以使用,如果你不知道自己的系统上面的命令在

10.Linux系统启动详解

10.Linux系统启动详解 ·1.BIOS,负责检查硬件并且查找可启动设备, ·2.MBR:Boot Code, ·bios找到可启动设备后执行其引导代码,MBR的前446字节, ·/boot/grub/stage1内容为当前硬盘MBR的镜像, ·3.执行引导程序-GRUB ·grub是现在Linux使用的主流引导程序,可以用来引导大多数主流系统, ·Linux的grub可以识别windows的启动程序,但windows的会覆盖Linux的,故先windows后Linux, ·grub相关文件