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