php网站系统,微网站 合同,wordpress 下载别人的主题,外贸网站建设方法1. 对当前目录创建文件的理解
我们知道在创建一个文件时#xff0c;它会被默认创建到当前目录下#xff0c;那么它是如何知道当前目录的呢#xff1f;
对于下面这样一段代码
#include stdio.h
#include unistd.hint main()
{fopen(tmp.txt, …1. 对当前目录创建文件的理解
我们知道在创建一个文件时它会被默认创建到当前目录下那么它是如何知道当前目录的呢
对于下面这样一段代码
#include stdio.h
#include unistd.hint main()
{fopen(tmp.txt, w);while (1){printf(这是一个进程\n);sleep(1);}return 0;
}
在它被加载成为一个进程时我们查看相应的PID有 在Linux中所有进程是被存放在一个/proc目录中的即 我们找到对应的PID就能进入并查看该进程进入后发现 可以看到在进程中有一个cwd文件即current work dir当前工作目录在代码中使用fopen向磁盘中写入文件tmp.txt时会自动的将cwd中的路径拼接到它的前面
2. 进程标识符
①PID PID是进程标识符Process Identifier的缩写它是一个唯一标识符用于标识正在运行的每个进程。每个进程在系统中都有一个唯一的PID可以通过PID来识别和管理进程。PID是一个非负整数通常在系统启动时自动分配给进程并且在一个给定的时间内是唯一的。 以以下代码为例 编译后运行有 有了标识符之后我们可以通过使用对应进程的PID使用kill命令来干掉该进程即
kill -9 12489 那么我们如何知道当前进程的PID呢
首先我们要知道PID是存放在task_struct中的在我们使用ps命令时它的本质就是遍历一遍task_struct链表那么我们怎么获取呢——Linux肯定是不希望我们直接通过使用域访问符.来取得PID的因此它提供了一个系统调用的接口即函数getpid()它的手册如下 我们多运行几次后可以发现 对PID来说PID只会保证当前运行期间有效所以在不同的运行期间其会不断变化
②PPID
PPID指的是父进程的PID即父进程的进程ID号。与PID类似要获取PPID我们也可以使用对应函数getppid()其手册如下 在上面的多次运行中我们可以发现在不同运行期间PPID一般不变我们查看可以发现 PID为6116的只有一个——bash我们之前提到过对于输入的命令系统会单独创建一个bash来处理输入的命令这样就能做到在输入命令时会将其作为bash的子进程运行。而在断开主机重连后可以看到 此时PPID发生了变化这是因为在登录到主机时系统会单独新创建一个bash。 3. 创建进程——fork
我们以下面的代码为例 对其编译运行后我们可以使用
while :; do ps ajx | head -1 ; ps ajx | grep mycode | grep -v grep;sleep 1;done
来不断查看与mycode相关进程的状态
即
我们查看fork手册有 可以看到在手册中提到fork会返回两个值返回id0时标识其为子进程id0时标识其为父进程而在运行结果中我们可以看到父进程就是当前进程子进程是新分支。至此我们对于创建一个新进程有两种方法其中一个就是使用./文件的方式在指令层面创建一个进程另外一个就是使用fork函数在代码层面创建一个进程。其实在调用fork函数之后会产生两个执行流。
在这里我们可以提出几个问题
1. 为什么fork要给子进程返回0 给父进程返回PID
首先我们要知道fork返回不同的值是为了让不同的执行流去执行不同的代码块因为fork之后的代码是父子进程共享的因此控制if等条件即可控制不同执行流。给子进程返回0只是一个标记标志着子进程创建成功而给父进程返回PID是因为对于一个父进程其可能会有多个子进程拿到子进程PID是为了标识唯一性。
2. fork函数是如何做到返回两次的 首先我们要知道创建一个子进程对于Linux来说就是创建一个新的task_struct即只需要将原来的父进程task_struct拷贝一份再对其中的部分属性做修改如PIDPPID等即可而在fork后父子进程访问这之后的同一份代码因为代码不可修改但是由于数据可能被修改因此不能让父子进程共享同一份数据那么就该让子进程拷贝一份父进程的数据但是如果拷贝之后没有对数据进行修改那么又会导致资源的浪费因此Linux规定在子进程尝试修改数据时操作系统会为其申请一份新空间使用多少申请多少子进程修改这份新空间的数据即可这样的方式也被称为数据层面的写实拷贝。
而对于fork来说他是一个函数其内部也有其自己的实现其内部可能包含1. 创建子进程task_struct; 2. 填充task_struct3. 让它指向同一份代码4. 使它可以被自由调度......在完成了这一系列的任务之后子进程已经被创建好了此时由于父子进程共享同一份代码到最后的return 语句时父进程与子进程会各自返回一次数据。
3. 对于id变量它是怎么做到拥有不同内容的
在代码中可以看到pid_t id fork();这个id就是数据内容在fork返回两次后对于id来说发生了数据的写实拷贝。
在了解了进程的创建后我们对于bash也有了一个新的认识即它在使用的途中一定会调用fork函数并用其来创建子进程执行解释命令。
4. 进程状态
①一般操作系统学科中的进程状态
1. 运行 这些task_struct已经准备好了可以随时被调度此时在队列中的状态称为运行态R一般来说在队列中是到了谁就执行谁。那么只要进程放到CPU中是不是一定要执行完毕所有的内容才能执行下一个进程呢如while(1)答案肯定是否定的其实对于每个进程都具有一个属性——时间片有了时间片后在一段时间内所有的进程代码都会执行并发执行。而在这个过程中一定会有大量的把进程从cpu上放上与拿下的动作我们将其称为进程切换。
2. 阻塞 当task_struct对应的数据代码需要从键盘中读取数据时但是此时却没有输入时这种状态就称为阻塞状态此时该task_struct会被链入键盘的waitqueue中如果下一个需要键盘输入的task_struct直接链入之后的队列即可。
3. 挂起
在阻塞状态时如果操作系统内部资源不足时为了保证操作系统维持正常状态而要省出资源此时操作系统会将task_struct保留将代码和数据放在外设中换出此时的进程状态为挂起而在需要时会将代码和数据加载回来换入。
②Linux中的进程状态
在Linux中定义如下
static const char * const task_state_array[] {
R (running), /* 0 */
S (sleeping), /* 1 */
D (disk sleep), /* 2 */
T (stopped), /* 4 */
t (tracing stop), /* 8 */
X (dead), /* 16 */
Z (zombie), /* 32 */
};
以下面的代码为例 我将其运行后查看 此时的S此处的表示前台运行不能输入bash命令表示处于S状态即阻塞状态这是因为cpu的运行速度太快而显示屏运行速度相等较慢因此有极大的可能性时处于S状态而我们将代码修改一下 即可发现 此时由于不需要等待外设因此一直处于运行态即R。
对于D状态我们先举一个具体的例子
若处于极端情况下时进程被kill磁盘写入数据失败时反馈信息给进程时进程却不见了此时磁盘一般会选择丢失这部分数据那么为了防止这种情况发生我们只需要让进程在等待磁盘时不能被杀掉即可即将其设置为D状态在磁盘写入完毕后再将其状态修改为S。由此我们可以认识到S状态属于浅度睡眠可以随时响应系统的调度而D状态属于深度睡眠它不会响应系统调度。
对于T状态我们可以使用kill的命令来暂停进程即 查看后我们知道可以使用-19命令来发出暂停信号 即 此时我们可以看到mycode处于暂停状态而对于t状态我们可以使用gdb来演示 可以看到当我们使用断点停止在某一处时此时mycode处于t状态。
对于X状态和Z状态在一个进程死亡的时候会先进入Z状态其目的是需要维持相应的状态直到被父进程读取到信息后其状态才会转换成X瞬时。
我们以下面的代码举例 运行并监视有 可以看到在子进程结束父进程未结束后子进程处于Z状态defunct失效的我们将此状态称为僵尸状态进程一般退出时若父进程没有主动回收子进程信息子进程会一直处于Z状态这样就会导致资源会被一直占用就有可能导致内存泄漏。
将代码修改一下 运行并监视有 可以看到对于操作系统本身来说若父进程先退出其子进程的父进程会被修改为1号进程即操作系统。孤儿进程会在后台运行而且因为其父进程存在不会变成僵尸进程即不会造成内存泄漏。对于父进程为1的进程我们将其称为孤儿进程该进程被操作系统所领养。那么为什么要被领养呢因为孤儿进程未来也要退出也需要被释放而操作系统本身具有回收功能。 文章转载自: http://www.morning.skbbt.cn.gov.cn.skbbt.cn http://www.morning.jopebe.cn.gov.cn.jopebe.cn http://www.morning.hcgbm.cn.gov.cn.hcgbm.cn http://www.morning.hwnqg.cn.gov.cn.hwnqg.cn http://www.morning.egmux.cn.gov.cn.egmux.cn http://www.morning.glpxx.cn.gov.cn.glpxx.cn http://www.morning.qwnqt.cn.gov.cn.qwnqt.cn http://www.morning.nlbhj.cn.gov.cn.nlbhj.cn http://www.morning.xlyt.cn.gov.cn.xlyt.cn http://www.morning.rbbyd.cn.gov.cn.rbbyd.cn http://www.morning.hqxyt.cn.gov.cn.hqxyt.cn http://www.morning.fldsb.cn.gov.cn.fldsb.cn http://www.morning.nytgk.cn.gov.cn.nytgk.cn http://www.morning.jwmws.cn.gov.cn.jwmws.cn http://www.morning.pkrtz.cn.gov.cn.pkrtz.cn http://www.morning.mxnhq.cn.gov.cn.mxnhq.cn http://www.morning.nhrkc.cn.gov.cn.nhrkc.cn http://www.morning.zrdhd.cn.gov.cn.zrdhd.cn http://www.morning.lgsfb.cn.gov.cn.lgsfb.cn http://www.morning.wxckm.cn.gov.cn.wxckm.cn http://www.morning.lztrt.cn.gov.cn.lztrt.cn http://www.morning.jfwrf.cn.gov.cn.jfwrf.cn http://www.morning.qlpq.cn.gov.cn.qlpq.cn http://www.morning.hmgqy.cn.gov.cn.hmgqy.cn http://www.morning.lizimc.com.gov.cn.lizimc.com http://www.morning.rcfwr.cn.gov.cn.rcfwr.cn http://www.morning.qrzwj.cn.gov.cn.qrzwj.cn http://www.morning.wglhz.cn.gov.cn.wglhz.cn http://www.morning.pbzlh.cn.gov.cn.pbzlh.cn http://www.morning.jxjrm.cn.gov.cn.jxjrm.cn http://www.morning.rkjz.cn.gov.cn.rkjz.cn http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.bdypl.cn.gov.cn.bdypl.cn http://www.morning.trzmb.cn.gov.cn.trzmb.cn http://www.morning.ptzf.cn.gov.cn.ptzf.cn http://www.morning.knsmh.cn.gov.cn.knsmh.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.wprxm.cn.gov.cn.wprxm.cn http://www.morning.snnwx.cn.gov.cn.snnwx.cn http://www.morning.gsrh.cn.gov.cn.gsrh.cn http://www.morning.bkgfp.cn.gov.cn.bkgfp.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.cbtn.cn.gov.cn.cbtn.cn http://www.morning.xfjwm.cn.gov.cn.xfjwm.cn http://www.morning.gjqnn.cn.gov.cn.gjqnn.cn http://www.morning.mumgou.com.gov.cn.mumgou.com http://www.morning.c7623.cn.gov.cn.c7623.cn http://www.morning.bqwnp.cn.gov.cn.bqwnp.cn http://www.morning.qkdcb.cn.gov.cn.qkdcb.cn http://www.morning.dqgbx.cn.gov.cn.dqgbx.cn http://www.morning.tpbhf.cn.gov.cn.tpbhf.cn http://www.morning.jgnst.cn.gov.cn.jgnst.cn http://www.morning.pgrsf.cn.gov.cn.pgrsf.cn http://www.morning.mszls.cn.gov.cn.mszls.cn http://www.morning.hypng.cn.gov.cn.hypng.cn http://www.morning.zdxinxi.com.gov.cn.zdxinxi.com http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.cgtfl.cn.gov.cn.cgtfl.cn http://www.morning.xysxj.com.gov.cn.xysxj.com http://www.morning.xhqr.cn.gov.cn.xhqr.cn http://www.morning.wfwqr.cn.gov.cn.wfwqr.cn http://www.morning.smtrp.cn.gov.cn.smtrp.cn http://www.morning.hxljc.cn.gov.cn.hxljc.cn http://www.morning.dmwck.cn.gov.cn.dmwck.cn http://www.morning.crrjg.cn.gov.cn.crrjg.cn http://www.morning.mkccd.cn.gov.cn.mkccd.cn http://www.morning.mjtgt.cn.gov.cn.mjtgt.cn http://www.morning.qczjc.cn.gov.cn.qczjc.cn http://www.morning.mhnrx.cn.gov.cn.mhnrx.cn http://www.morning.kxryg.cn.gov.cn.kxryg.cn http://www.morning.fsnhz.cn.gov.cn.fsnhz.cn http://www.morning.tlnbg.cn.gov.cn.tlnbg.cn http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn http://www.morning.wmcng.cn.gov.cn.wmcng.cn http://www.morning.tpyrn.cn.gov.cn.tpyrn.cn http://www.morning.rhjhy.cn.gov.cn.rhjhy.cn http://www.morning.qfdmh.cn.gov.cn.qfdmh.cn http://www.morning.kjawz.cn.gov.cn.kjawz.cn http://www.morning.zyrcf.cn.gov.cn.zyrcf.cn http://www.morning.rkjz.cn.gov.cn.rkjz.cn