当前位置: 首页 > news >正文

网站首页英文保定seo外包服务商

网站首页英文,保定seo外包服务商,专业的做网站的,hao123浏览器下载安装目录 进程的特点 进程特点的介绍 进程时如何实现并发性的 进程间如何切换 概念铺设 PC指针 上下文 环境变量 PATH 修改PATH HOME SHELL env 命令行参数 什么是命令行参数? 打印命令行参数 通过函数获得环境变量 getenv 命令行参数 env 修改环境变…

目录

进程的特点

进程特点的介绍

进程时如何实现并发性的

进程间如何切换

概念铺设

PC指针

上下文

环境变量

PATH

修改PATH

HOME

SHELL

env

命令行参数

什么是命令行参数?

打印命令行参数

通过函数获得环境变量

getenv

命令行参数 env

修改环境变量

环境变量总结

本地变量 & 内建命令

查看本地变量

内建命令


进程的特点

根据我们前面学习过的进程,我们总结一下进程的特点。

  • 竞争性:进程直接是相互竞争的,进程想要运行就必须竞争CPU资源,也需要竞争其他资源。

  • 独立性:进程之间是互不干扰的,所以如果某一个进程挂掉之后并不会影响其他的进程。

  • 并行性:如果在多CPU的环境下,多个进程可以同时运行。

  • 并发性:在单CPU的环境下,进程之间是基于时间片轮转的,进程在运行特定的时间后就必须换下一个进程来运行。

进程特点的介绍

竞争性:由于我们每一个进程想要运行都是需要占用CPU资源的,但是我们的CPU只有一个,所以我们的进程必须竞争CPU资源,所以我们的进程是具有竞争性的。

独立性:在前面学习的子进程中,我们的父子进程共享同一份代码,而数据也是写时拷贝的,并且我们的进程都是有自己独立的代码和数据,所以我们进程也是互补干扰的,所以为我们的进程时具有独立性的。

并行性:当计算机有多个CPU的时候,计算机内多个进程就可以在多个CPU上同时运行,所以这就是进程的并行性。

并发性:由于大多数环境下计算机中都只有一个CPU,所以为了让进程都可以得到CPU资源,那么就需要让进程可以在运行的时候切换,让每个进程执行特定的时间就切换到下一个进程,由于计算机的速度时很快的,所以我们并不会感受到进程间切换的卡顿感。

下面我们主要介绍一下进程的并发性。

进程时如何实现并发性的

在计算机中一定有很多的进程,所以进程之间必须要切换才能让CPU可以执行不同的进程,但是什么时候切换也是一个问题,所以这里还引入了时间片轮转,就是让进程运行固定的时间然后切换到下一个进程。

所以并发就是通过两点来实现:

  • 进程间切换

  • 时间片轮转

所以我们的并发就是,基于进程间切换的时间片轮转算法。

进程间如何切换

既然我们知道进程是通过切换和时间片轮转来实现的并发,那么进程是如何切换的?

概念铺设

PC指针

我们的计算机时如何知道我们的程序执行到哪一步的?

由于我们的进程时需要切换的,所以我们进程再次被切换到CPU上执行到时候,那么我们的计算机时如何知道该程序被执行到哪一步的?

函数计数器(pc指针):就是通过函数计数器,也称为PC指针,来实现。

如果CPU想再次执行我们该程序的代码,那么CPU就会执行pc指针的下一条代码。

上下文

在提这个概念之前,我们先用一个场景来描述一下。

场景:

你有一个要去当兵的朋友,你的朋友被部队选上了,然后你的朋友很高兴,回宿舍后什么都不管第二天就走了,然后当了两年兵回来后,发现自己宿舍的东西没了,自己的学籍也没了,因为在这两年里面,学校不知道你的朋友当兵去了,然后由于你的朋友每天都不上课,所以被学校开除了学籍。

场景:

还是你的朋友,同样被选上了,这一次你的朋友回宿舍后收拾好了自己的行囊,然后给辅导员也说了这个事情,辅导员帮你的朋友办理了各种手续以及档案等你曾经的记录,然后让你的朋友带走,这次你的朋友回来后把档案那些东西又交给了学校,学校帮忙恢复了学习,然后你的朋友又可以开始正常上课了。

通过上面的这两个故事,我们感觉到了什么?那么如果我们一个CPU要被切换出去的时候,CPU曾经的数据要怎么办?

在我们的 CPU 中有很多寄存器,这些寄存器就是保存的是当前进程的数据,如果我们要切换走一个进程的时候,我们需要把这些寄存器里面的数据也让该进程带走,好让该进程下一次回来的时候在把上一次运行的数据带过来,继续运行。

所以,寄存器里面的数据就是 “上下文” 。

而进程就必须把上下文保护好,好让下一次运行的时候知道如何运行。

概念布设完毕,所以进程间是如何切换的?

进程切换的要求:

  • 保护上下文:将寄存器里面的数据让进程保存起来。

  • 恢复上下文:当一个进程恢复的时候,需要先将它的上下文加载进去。

进程的特点就到这里,我们也说了进程的并发,也说了为什么可以实现并发,还有并发的条件,以及实现并发条件之一的进程切换的部分问题。

环境变量

在说这个概念之前,我们想先看一下环境变量,然后我们正在说环境变量的概念。

PATH

PATH 是一个系统中的环境变量,那么如何查看PATH呢?

[lxy@hecs-165234 linux5]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin

我们想要查看 PATH 我们可以 echo 然后 $ + 环境变量就可以查看。

那么这个PATH 是什么呢?

我们现在先写一个代码来看一下。

int main()
{for(int i = 0; i < 10; ++i)printf("myproc: [%d]\n", i);return 0;
}

我们然后编译这个代码,我们运行它。

[lxy@hecs-165234 linux5]$ ./myproc 
myproc: [0]
myproc: [1]
myproc: [2]
myproc: [3]
myproc: [4]
myproc: [5]
myproc: [6]
myproc: [7]
myproc: [8]
myproc: [9]

我们运行的时候 ./myproc 我们前面说过,其实我们的指令也是代码,那么为什么我们的指令就不用表明路劲呢?

因为我们的指令会自己查找,而在哪查找呢?就是在 PATH 这个环境变量中。

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin

我们就会在上面的这些路劲里面查找我们的指令,上面这些路劲就是我们的默认指令查找路劲。

如果我们想要自己的程序也不用指明路劲呢?

修改PATH

我们只需要把我们这个程序的路劲添加到 PATH 中,那我们我们就不用指明路劲了,下面我们看一下如何添加。

[lxy@hecs-165234 linux5]$ PATH=/home/lxy/108/linux5

如果我们之间这样就是把 PATH 给覆盖了,并不是添加了当前路劲,所以我们应该如何添加呢?

[lxy@hecs-165234 linux5]$ PATH=$PATH:/home/lxy/108/linux5

下面在查看一下 PATH

[lxy@hecs-165234 linux5]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin:/home/lxy/108/linux5

我们就添加进来了,下面看一下是否可以不用路劲就可以执行。

[lxy@hecs-165234 linux5]$ myproc
myproc: [0]
myproc: [1]
myproc: [2]
myproc: [3]
myproc: [4]
myproc: [5]
myproc: [6]
myproc: [7]
myproc: [8]
myproc: [9]

确实可以执行,实际上,这个 PATH环境变量是临时的,我们的 PATH 环境变量实际上实在系统中的,然后 bash 启动的时候读取的,所以我们可以随便修改这个环境变量,如果修改错了,我们直接重启 bash 就可以了,所以我们直接改掉 PATH 路劲然后我们看那些指令是否就不能用了。

[lxy@hecs-165234 linux5]$ PATH=/
[lxy@hecs-165234 linux5]$ ll
-bash: ls: command not found
[lxy@hecs-165234 linux5]$ ls
-bash: ls: command not found
[lxy@hecs-165234 linux5]$ cd ..
[lxy@hecs-165234 108]$ cd linux5

我们看到我们的 ll ls 部分指令就使用不了了,但是还是有一些指令可以使用。

我们下面重启一下 bash 就可以了。

我们下面在看两个环境变量。

HOME

我们直接打印查看。

[lxy@hecs-165234 linux5]$ echo $HOME
/home/lxy

我们当前的 lxy 用户查看的 HOME,就是上面的这个样子,下面我们换 root 在查看一下。

[root@hecs-165234 lxy]# echo $HOME
/root

我们的 root 用户的 HOME 环境变量就是上面的这个样子。

SHELL

在看一个 SHELL环境变量。

[lxy@hecs-165234 linux5]$ echo $SHELL
/bin/bash

SHELL 就是我们使用的 shell 是什么,我们这里使用的 shell就是 bash。

当然我们的环境变量不止这么一些,我们怎么样查看全部的环境变量呢?

env

查看全部的环境变量。

[lxy@hecs-165234 linux5]$ env
XDG_SESSION_ID=6727
HOSTNAME=hecs-165234
TERM=xterm
SHELL=/bin/bash
HISTSIZE=10000
SSH_CLIENT=123.138.70.232 62136 22
SSH_TTY=/dev/pts/0
USER=lxy
LD_LIBRARY_PATH=:/home/lxy/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/lxy
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin
PWD=/home/lxy/108/linux5
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/home/lxy
LOGNAME=lxy
SSH_CONNECTION=123.138.70.232 62136 192.168.0.70 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/1000
HISTTIMEFORMAT=%F %T lxy 
_=/usr/bin/env
OLDPWD=/home/lxy/108

上面1就是我们全部的环境变量。

我们挑一些介绍一下。

HOSTNAME=hecs-165234

HOSTNAME:就是主机名

SHELL=/bin/bash

SHELL:我们前面介绍了。

HISTSIZE=10000

HISTSIZE:当我们 history 的时候我们就会打印出我们的历史指令,而我们的历史指令的保存是由个数限制的,而 HISTSIZE 就是最大的存储历史指令的限制。

SSH_TTY=/dev/pts/0

这个就是表示我们 bash 输出的时候往哪里输出,我们可以在启动一个然后我们 echo 向这个里面写入 hello

USER=lxy

USER:表示当前的使用者。

PWD=/home/lxy/108/linux5

PWD:表示我们当前文件的路劲。

OLDPWD=/home/lxy/108

OLDPWD:表示我们上一次在那个路劲下。

[lxy@hecs-165234 linux5]$ cd /
[lxy@hecs-165234 /]$ cd -
/home/lxy/108/linux5
[lxy@hecs-165234 linux5]$ cd -
/
[lxy@hecs-165234 /]$ cd -
/home/lxy/108/linux5

cd - 表示就是去上一次的路劲。

上面就是我们的环境变量。

除了我们上面使用命令行操作查看环境变量,其实我们还可以使用函数来查看环境变量。

在谈下面的环境变量之前,这里先谈一个叫命令行参数。

命令行参数

什么是命令行参数?

在我们输入指令的时候,后满经常会带一些选项,而这些雪乡就是命令行参数。

实际上,在C语言或者C++中的 main 函数也是可以带命令行参数的,只是我们之前的环境都基本是在 windows 下,所以没有命令,我们也就接触不到命令行参数,我们先写一个程序看一下。

int main(int argc, char* argv[])
{if(argc != 2){printf("需要两个参数\n");return 0;}printf("OK\n");return 0;
}

这里我们看这一段代码,我们的 main 函数实际上可以带几个参数,其中这里带了两个参数,一个 argc 一个 argv。

argc:表示传过来多少个命令行参数,其中最少就是1个,也就是运行该函数的参数。

argv:表示命令行参数的里面传过来的字符串,我们的argv里面存到就是一个char* 的指针。

下面我们运行该函数看一下。

首先我们只有一个参数,也就是直接运行该函数。

[lxy@hecs-165234 linux5]$ ./myproc 
需要两个参数

下面我们传入参数,随便传入一个参数。

[lxy@hecs-165234 linux5]$ ./myproc -a
OK
[lxy@hecs-165234 linux5]$ ./myproc kkkkkk
OK

这里的参数什么都可以,只要由两个参数就可以了。

打印命令行参数

既然我们可以拿到命令行参数,也有命令行参数的个数,那么我们就可以打印它。

int main(int argc, char* argv[])
{for(int i = 0; i < argc; ++i)printf("argv[%d]: %s\n", i, argv[i]);return 0;
}

这样就可以打印命令行参数了。

我们下面运行改代码试一下。

只有一个参数。

[lxy@hecs-165234 linux5]$ ./myproc 
argv[0]: ./myproc

多个参数。

[lxy@hecs-165234 linux5]$ ./myproc -a -b -c hello
argv[0]: ./myproc
argv[1]: -a
argv[2]: -b
argv[3]: -c
argv[4]: hello

通过函数获得环境变量

getenv

SYNOPSIS#include <stdlib.h>char *getenv(const char *name);

getenv 函数传入一个环境变量名,然后返回环境变量的值。

下面使用程序来看一下。

int main(int argc, char* argv[])
{if(argc != 2){printf("需要环境变量\n");}else {printf("%s : %s\n", argv[1], getenv(argv[1]));}return 0;
}

这里我们通过命令行参数的方式传入环境变量名,然后使用 getenv 函数来获得环境变量。

这里我们直接传入PATH试一下。

[lxy@hecs-165234 linux5]$ ./myproc PATH
PATH : /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin

这里我们获得了环境变量。

下面我们使用环境变量来查看我们的用户,我们分别会使用 root 用户和普通用户来查看。

int main()
{if(strcmp(getenv("USER"), "root") == 0){printf("无视权限\n");}else {printf("普通用户\n");}return 0;
}

使用普通用户。

[lxy@hecs-165234 linux5]# ./myproc 
普通用户

下面使用 root 用户。

[root@hecs-165234 linux5]# ./myproc 
无视权限

所以这也就是我们的的权限问题。

命令行参数 env

在 main 函数中的命令行参数其实还可以传入一个参数,就是环境变量。

在打印命令行参数前,我们先说明一下,其实我们的命令行参数和环境变量env中最后一个指针都是null,所以即使我们不适用 argv 也可以打印。

int main(int argc, char* argv[], char* env[])
{for(int i = 0; argv[i]; ++i)printf("argv[%d]: %s\n", i, argv[i]);return 0;
}

下面传入参数打印。

[lxy@hecs-165234 linux5]$ ./myproc -a -b -c -d
argv[0]: ./myproc
argv[1]: -a
argv[2]: -b
argv[3]: -c
argv[4]: -d

那么下面我们也就直接打印一下我们的 env 环境变量。

[lxy@hecs-165234 linux5]$ ./myproc 
env[0]: XDG_SESSION_ID=6739
env[1]: HOSTNAME=hecs-165234
env[2]: TERM=xterm
env[3]: SHELL=/bin/bash
env[4]: HISTSIZE=10000
env[5]: SSH_CLIENT=123.139.60.208 35357 22
env[6]: SSH_TTY=/dev/pts/0
env[7]: USER=lxy
env[8]: LD_LIBRARY_PATH=:/home/lxy/.VimForCpp/vim/bundle/YCM.so/el7.x86_64
env[9]: LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
env[10]: MAIL=/var/spool/mail/lxy
env[11]: PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxy/.local/bin:/home/lxy/bin
env[12]: PWD=/home/lxy/108/linux5
env[13]: LANG=en_US.UTF-8
env[14]: HISTCONTROL=ignoredups
env[15]: SHLVL=1
env[16]: HOME=/home/lxy
env[17]: LOGNAME=lxy
env[18]: SSH_CONNECTION=123.139.60.208 35357 192.168.0.70 22
env[19]: LESSOPEN=||/usr/bin/lesspipe.sh %s
env[20]: XDG_RUNTIME_DIR=/run/user/1000
env[21]: HISTTIMEFORMAT=%F %T lxy 
env[22]: _=./myproc
env[23]: OLDPWD=/home/lxy/108

所以这样也可以打印环境变量。

通过上面的学习,我们可以看一下环境变量了。

我们在上面发现环境变量是可以变化的,当我们登录不同的账户的时候环境变量中的UESR就会变化,我们可以知道环境变量是动态的可以变化的。

在而且我们的环境变量实际上是存储在系统中的,每一次打开bash就会加载,所以我们的环境变量也是居于持久性。

在main函数中,我们看到我们main函数还可以传入 env 变量,所以我们的 env 实际上是可以被所有的子进程继承的,由于我们的进程都是 bash 帮我们创建,所以我们的所有的子进程都是可以有环境变量。

其实我们的环境变量还是可以修改的,我们看一下。

修改环境变量

我们现在想自己定义一个属于我们自己的环境变量,那么该怎么办呢?

[lxy@hecs-165234 linux5]$ MYVALUE=10001

我们上面这样可以吗?

实际上是不可以的,这样定义的话实际上是“本地变量”。

我们查看一下是查不到的。

[lxy@hecs-165234 linux5]$ env | grep MVALUE
[lxy@hecs-165234 linux5]$ 

那么我们的环境变量怎么定义。

[lxy@hecs-165234 linux5]$ export MYVALUE
[lxy@hecs-165234 linux5]$ env | grep MYVALUE
MYVALUE=10001

我们可以将本地变量前面加一个 export 就可以变为环境变量。

那么怎么删除呢?

[lxy@hecs-165234 linux5]$ unset MYVALUE
[lxy@hecs-165234 linux5]$ env | grep MYVALUE
[lxy@hecs-165234 linux5]$

环境变量总结

  • 全局性

  • 动态

  • 持久

  • 可修改

其实不仅仅有这些特性,还有一些,想了解的可以查一下。

本地变量 & 内建命令

最后一个话题,我们前面提到的本地变量和内建命令。

查看本地变量

set命令:

这里为了方便知道我们查到的是本地变量,我们可以先定义一个本地变量的值。

[lxy@hecs-165234 linux5]$ MYVALUE=10000
[lxy@hecs-165234 linux5]$ set | grep  MYVALUE
MYVALUE=10000

下面我们看一下本地变量有一些什么。

由于太多我们只挑几个看一下。

PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '

我们这三个,实际上就是本地变量,其中 PS1 就是表示命令行解释器的提示符 我们的普通用户就是 $

而下面的 > 就是还可以输入命令

[lxy@hecs-165234 linux5]$ ls \
> -a\
> -d\
> 

本地变量其实只会在本BASH中有效。

内建命令

我们现在来看一个操作。

[lxy@hecs-165234 linux5]$ MYVALUE=19999
[lxy@hecs-165234 linux5]$ echo $MYVALUE
19999

我们前面不是说,我们的这些指令实际上就是程序吗,那么我们的程序就是 bash 创建子进程来的,但是我们的 MYVALUE 是一个本地变量,本地变量子进程不是不会继承吗?那么echo是怎么样显示出来的?

这里就要纠正之前的一个说法了,其实我们的指令,不一定bash会创建子进程,如果是一些比较安全的指令,那么还是bash自己执行的。

所以我们的命令实际上是由两种:

  • 常规命令:bash创建子进程执行。

  • 内建命令:bash亲自执行,自己调用函数。

还有一个内建命令,比如 cd

下面我们写一个代码来看一下cd命令

首先介绍一个函数

SYNOPSIS#include <unistd.h>int chdir(const char *path);
DESCRIPTIONchdir() changes the current working directory of the calling process to the directory specified in path.

该函数传入一个路劲,然后可以修改该进程的路劲。

int main(int argc, char* argv[])
{if(argc != 2){printf("请输入修改路劲\n");}else {sleep(20);printf("开始修改路劲\n");chdir(argv[1]);printf("路劲修改结束\n");sleep(20);}return 0;
}

我们在休眠的过程中查看我们的该进程的路劲,然后休眠后在查看我们的路劲。

[lxy@hecs-165234 linux5]$ ./myproc /
开始修改路劲
路劲修改结束

在我们休眠前我们查到

lrwxrwxrwx 1 lxy lxy 0 Aug  5 19:51 cwd -> /home/lxy/108/linux5

休眠后

lrwxrwxrwx 1 lxy lxy 0 Aug  5 19:51 cwd -> /

这里看到我们确实修改成功。

http://www.tj-hxxt.cn/news/35342.html

相关文章:

  • 网站怎么做seo排名苏州整站优化
  • 做cpa建什么网站好网站推广公司哪家好
  • 政府网站建设公司苏州百度推广公司地址
  • 北京分形科技有限公司电商网站商品页的优化目标是什么
  • 张家港企业网站建设佛山市人民政府门户网站
  • 中山做网站的公司如何网上销售自己的产品
  • 北京网站建设及优化360搜索引擎入口
  • 教做黏土手工的网站google adwords关键词工具
  • 厦门网站开发公司数据营销
  • 做境外盈利网站违法吗软件外包平台
  • 公司网站建设策划书网络营销运营策划
  • wordpress user上海网站seo排名优化
  • 做商城网站要什么手续费百度推广的效果
  • 快速创建网站淘宝关键词排名查询工具免费
  • 哪个网站有帮忙做公开课课件长春seo网站排名
  • 建设网站的要点最有效的线上推广方式
  • 广州专业网站改版方案北京seo优化哪家好
  • 网站建设排名智能建站系统
  • 网站设计流程培训总结怎么写
  • 贵阳做企业网站百度站长平台链接
  • wordpress顶部滑动云南网站建设快速优化
  • 做网站的步骤的文本北京网站制作400办理多少钱
  • bp建设部网站sem运营有出路吗
  • 广州网站建设 粤icp网站之家查询
  • 珠海网站建设科速重庆森林百度云
  • 网站建设规划案例百度网址导航
  • 广西城乡和住房建设厅网站首页浏览广告赚钱的平台
  • 莘县网站制作自己开平台怎么弄啊
  • 做电影资源网站违法吗哈尔滨关键词优化方式
  • 管理网络的软件有哪些六年级下册数学优化设计答案