LINUX进程控制(system(),fork(),exec())

本文详细介绍了Linux系统中进程的五种状态及其转换,并重点讲解了常用的进程控制函数:system、fork、wait/waitpid、孤儿进程处理以及exec的使用。通过示例代码阐述了这些函数的工作原理和应用场景,如system函数执行命令,fork函数创建子进程,wait和waitpid收集子进程状态,孤儿进程的处理以及exec函数如何启动新程序并替换原有进程。
摘要由CSDN通过智能技术生成

linux上进程有5种状态

  1. 运行(正在运行或在运行队列中等待),多个进程可以处于可运行状态,在任何给定时间内只有一个进程可以在CPU上运行,CPU运行的算法很多,常见的是按优先级等分时间片轮转。
  2. 中断,休眠中, 等待信号的到来,进程受信号控制。
  3. 不可中断,有时,两个进程试图同时访问同一系统资源。例如,一个进程试图从磁盘数据块上读取信息,而另一个进程正在向该数据块写入信息。我们可以调用互斥锁锁住其中一个进程,防止发生冲突。
  4. 僵死,子进程over,父进程不知道,也就是没有wait()或者waitpid(),子进程会僵死。
  5. 挂起状态。

linux常用进程控制函数

(1)system

这个函数用于调用shell,执行一个指定的命令。

xin@xin-Lenovo-V3000:~/code/test$ vim makefile
xin@xin-Lenovo-V3000:~/code/test$ make
gcc -Wall -g -o system.o -c system.c
gcc -o system system.o
xin@xin-Lenovo-V3000:~/code/test$ ls
makefile  read  read1  read1.c  read1.o  read.c  read.c.autosave  read.o  system  system.c  system.o
xin@xin-Lenovo-V3000:~/code/test$ ./system
makefile  read  read1  read1.c  read1.o  read.c  read.c.autosave  read.o  system  system.c  system.o

对上边的命令稍微说一下:
vim makefile的意思是用vim编辑器编辑makefile文件,个人觉得vim比vi好用的多,对于一些短小的程序,可以在终端直接vim,比较方便,对于一些大的项目,比如cpp,推荐使用eclipse,vs(在windows下),我个人习惯用qt。makefile相当于一个模板,把g++(gcc)命令包括进来,对于不同文件的编译,只需要很小部分的改动makefile文件,编译库文件,交叉编译等后边会讲到。我们先看一下makefile文件:

.SUFFIXES:.c .o
CC=gcc
SRCS=system.c//这里是每次要编译的文件名
OBJS=$(SRCS:.c=.o)//把所有.c文件变成.o文件传给OBJS,这样makefile文件改动部分更小。
EXEC=system//这里是生成的可执行文件名称
start:$(OBJS)//建立依赖项
        $(CC) -o $(EXEC) $(OBJS)//链接
.c.o:
        $(CC) -Wall -g -o $(@) -c $<//编译
clean:
        rm -f $(OBJS)//删除.o文件
        rm -f core*//删除core文件

其中vim常用三个命令,i为插入命令,之后就可以编辑,Esc为退出插入状态,:wq保存并退出。
执行./system文件后相当于ls命令,system()函数比较简单。

(2)fork()

PID

Process ID进程标识符,两种用法最常见,(1)创建唯一的文件或目录名(2)把PID写入日志文件做日志信息的一部分。

共享代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值