分类: LINUX
2012-01-29 12:41:09
1、 含义
程序:指令的集合
进程:程序的运行活动
2、进程的属性:
1) 动态性、具有生命周期:创建à运行à消亡
2) 独立性
进程的分类:(查看进程ps -ef/pstree进程树)
交互进程
批处理进程
精灵进程/守护进程daemon:父进程为1,控制终端为“?”,即无终端。init是所有进程的父进程,进程号没有0
隐藏进程:一般黑客使用
3) 并发性
nice设置进程优先级
4) 异步性
3、进程的三态:
执行态、等待状态、就绪态
4、进程操作
在32位的操作系统里,2^32=4G虚拟内存空间,3G到4G为内核区
main() 0G
cs(代码存储区) |
文字存储区 |
data(初始化的静态变量),如static |
栈,如auto |
堆,如malloc |
内核区 |
4G
虚拟地址à逻辑地址à物理地址,linux中得swap相当于windows的虚拟空间。
1) 创建子进程
fork,像static、auto变量在子进程中有独立存储空间,父子进程的地址一样。
vfork里必须是先执行子进程,主进程处于挂起状态,父子进程共用存储空间。
生产时一般不用vfork
2) clone
3) 进程退出(cd /proc可以看到内核的映射,查看进程的描述信息与控制信息。)
①自然退出(main)
②main函数里执行return语句,但是建议使用exit退出,如exit(0)。
③信号退出,trap -l命令行查看信号的函数,如alarm(2)时钟,执行2s后退出。
④exit和_exit函数退出
void exit(int status)返回给操作系统,status为EXIT_SUCCESS、EXIT_FAILURE
exit和_exit的区别
exit |
会刷新I/O缓冲区 |
属于标准c库 |
在执行atexit/on_exit时会先注册再执行 |
_exit |
不会刷新I/O缓冲区 |
属于posix库 |
不会执行atexit |
注:缓冲区就是内存,分三种情况:行缓冲,linux不会立即打印、全缓冲、无缓冲
setbuffer设置缓冲,让printf立即输出---加入\n或者是在printf后面加上fflush(stdout);
4) 进程等待
wait、waitpid:控制父进程在子进程后退出(把父进程挂起),以避免僵死进程发生。当子进程执行完后,在内核产生SIGCHLD信号给父进程,父进程然后给proc,父进程返回childID,然后父进程又继续执行,这样一级一级回收,最终给最终级进程。
pid_t wait(int *status)其中status是当前子进程怎样退出,当一个子进程退出返回一个id。
pid_t waitpid(……)
在unix中还有wait3和wait4
5) kill -l 信号 //可以查看信号。具体看kill的用法,比如杀死僵死进程:kill它的父进程
kill -kill 父ID
kill all +进程名字 //停止多个同名的进程,主要针对守护进程。
kill函数、setsid函数---创建一个会话期session,并把它设置为主ID,脱离终端。
守护进程日志/var/log/messages文件
日志配置文件more syslog.conf
日志守护进程ps -ef|grep syslogd