Linux常见进程命令:
ps | 查看系统中的进程 如:ps -af ps -ef |
top | 动态的现实系统中的进程 |
nice | 按用户的指定的优先级运行 |
renice | 改变正在运行的进程的优先级 |
crontab | 用于安装、删除或者列出用于驱动cron后台驱动 |
kill | 终止进程 |
bg | 将挂起的进程放到后台执行 |
- # include <unistd.h>
- # include <sys/stat.h>
- # include <sys/types.h>
- # include <fcntl.h>
- # include <stdio.h>
- # include <stdlib.h>
- # include <string.h>
- # define ERR_EXIT(m) \
- do \
- { \
- perror(m); \
- exit(EXIT_FAILURE); \
- }while(0)
- int main(int argc,char *argv[])
- {
- signal(SIGCHLD,SIG_IGN);
- printf("before fork pid = %d\n",getpid());
- pid_d pid;
- pid = fork();
- if(pid == -1)
- {
- ERR_EXIT("fork error");
- }
- if(pid > 0)
- {
- printf("this is parent pid =%d childpid = %d\n",getpid(),pid);
- sleep(1);
- }
- else if (pid == 0)/*此为父进程*/
- {
- printf("this is child pid=%d parentpid = %d\n",getpid(),getppid());
- }
- return 0;
- }
fork() 一次调用两次返回
fork()成功,创建了一个进程副本,意味着有两个进程了,
fork(),两次返回是在不同的地址空间返回的,是在各自的进程地址空间返回的、
A
fork();
A'
fork系统调用后,父子进程交替进行
孤儿进程,父进程先结束,留着子进程
托孤给1号进程也就是 init,父进程变成了 init
defunct 僵尸进程,不可能处于活跃状态
子进程先退出,父进程还未查询子进程的退出状态,此时子进程就处于僵尸状态
避免僵尸进程的方法:
子进程结束时发生信号给父进程
# include <signal.h>
signal(SIGCHLD,SIG_IGN);
父进程先退出,子进程就成为孤儿进程,父进程变成了1号进程
子进程先退出,父进程尚未查询子进程的状态,成为僵尸进程
代码段+数据段+PCB
代码段可以共享
写时复制copy on write
需要的malefile文件:
.PHONY:clean all
CC=gcc
CFLAGS=-Wall -g
BIN=01cop
all:$(BIN)
%.O:%.c
$(CC) %(CFLAGS) -c $< -o $@
clean:
rm -f *.o $(BIN)