linux 复习杂记(一) linux中的进程
来源:互联网 发布:js 0开头数字转字符串 编辑:程序博客网 时间:2024/06/11 03:52
1.父进程与子进程拥有私有的内存映像,调用fork函数生成子进程之后,父进程对属于它的变量作出修改对于子进程来说是不可见的。但是,父进程和子进程是可以共享已经打开的文件的。如果一个文件在子进程创建之前被打开了,那么父进程对文件内容作出了修改,对于子进程来说是可见的。
2.fork函数会返回两次,一个是返回给父进程的,返回值是子进程的id。一个是返回给子进程的,返回值是0。子进程可以通过getpid函数获取自己的进程号。
3.进程间可以通过管道来进行进程间通信。一个进程往管道写入字节流,另一个进程可以通过管道读取字节流。如果一个管道是空的,那么读取消息的进程会被挂起,直到有可用的数据为止。
4.另一种进程间通信方式是软件中断--即信号。一个进程可以给在同一个进程组的进程发送信号。对于一个信号,进程可以选择忽略它、获取它或者利用这个信号杀死某个进程。如果想获取它,必须指定一个信号处理函数。
5.如果通过fork函数创建了子进程,那么子进程中止的时候需要父进程调用wait函数或者waitpid函数来处理。如果子进程中止的时候而父进程没有调用wait或者waitpid来等待它,子进程会进入僵死状态,直到父进程调用wait或者waitpid来等待它,才会结束。waitpid有三个参数,第一个是子进程的id,如果是-1,那么任意一个终止的子进程结束的时候都会调用waitpid来成功结束。第二个参数是用于记录子进程返回的状态,是一个引用值传进去的。第三个参数决定如果没有子进程结束运行的时候,调用者是阻塞还是返回。函数原型是waitpid(pid,&statloc,opts);
6.父进程调用了fork创建子进程之后,可以使用exec函数来用一个可执行文件替代子进程原来的核心映像,从而运行相应的功能。exec执行的可运行文件最后的exit函数的参数会传递给waitpid的第二个参数。
7.可以通过sigaction来指定一个信号处理函数。sigaction的第一个参数是需要捕捉的信号,第二个是指向一个特定Struct类型的指针,用于指定一个信号处理函数和一些其他的位和标志。第三个也是和第二个参数一样类型的结构的指针,用于返回信息。
8.一些按键和调用kill函数都可以发送信号(kill函数除了用于杀死一个进程也是可以发送其他信号的~)。
9.在一段时间内,对于信号来说是不排队的。意思就是,如果同时有几个进程发送了同一个信号,其他来接受这个信号的函数,只会收到一次这个信号。(这个是参考Unix网络编程:“如果一个信号在被阻塞期间产生了一次或多次,那么该信号被解阻塞之后通常只递交一次,也就是说Unix信号默认是不排队的。”)
10.在linux中,使用结构体task_struct来表示一个任务。而且,无论是进程还是线程,都是用这个结构体。所以,一个单线程进程只有一个task_struct,而多线程进程会有多个task_struct。一个进程可以通过pid(进程号)来映射到相应的task_struct,来获取相应的进程信息。task_struct是保存在内存当中。需要注意的是,linux采用的是写时复制,就是调用fork函数之后,虽然子进程和父进程的虚拟内存空间是不同的,但是实际物理内存空间是相同的,只有在内存中的内容发生变化的时候,才进行真正的内容复制。这样可以节省很多RAM。
- linux 复习杂记(一) linux中的进程
- linux复习杂记(二) linux网络编程中的细节
- Linux 杂记(一)
- linux学习杂记(一)
- linux C杂记(一)
- 初学Linux杂记(一)
- Linux复习(一)
- linux复习(一)
- Linux学习杂记一
- linux复习杂记(三)select函数相关
- Linux内核中的进程(一)
- linux进程复习笔记
- Linux--进程复习
- Linux知识复习(一)
- linux shell 复习(一)
- 进程以及Linux中的进程相关概念(一)
- linux进程(一)
- Linux进程(一)
- JavaScritp闭包
- 通检检测技术有限公司-TCD-提供灯具CE检测认证
- PHP_SQL_数据库读取的“日期”处理
- linux vmplice 示例
- DQL数据查询语言(二)及数据的备份与恢复
- linux 复习杂记(一) linux中的进程
- http部分内容总结
- 【DP】[USACO 2016 February Contest, Gold]Circular Barn Revisited
- 【BZOJ 2243】染色 - 树链剖分+线段树
- Linux的文本编辑命令除了vi(vim),还有哪些?
- 2016-3-12 Python学习
- Cocos2dx-- 3.0前后对比
- Python简单介绍
- Java程序员应该知道的10个Eclipse调试技巧