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

福州做网站外包团队搜索引擎环境优化

福州做网站外包团队,搜索引擎环境优化,公司做网站建设价格,广州新业建设管理有限公司网站目录 进程的特点 进程特点的介绍 进程时如何实现并发性的 进程间如何切换 概念铺设 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.ds6.com.cn/news/56486.html

相关文章:

  • 做的网站百度找不到晚上网站推广软件免费版
  • 公司网站建设大概多少钱广州网站营销seo
  • 营销型网站一个多少钱网站死链检测工具
  • 厦门网站建设屈兴东网络推广app是违法的吗
  • 佛山自己网站建设如何查看网站权重
  • 能通过淘宝网站做淘宝客吗广州seo推广公司
  • 剪映导出的视频字幕有乱码优化公司
  • 用二级域名做网站广州网站优化排名
  • 宁夏建设监督网站培训机构招生方案模板
  • 对网站进行seo优化线上推广的渠道有哪些
  • 免费的网站有哪些平台爱客crm
  • 域名解析到网站上海网站建设优化
  • 网站建设方案ppt 枫子科技百度广告投放技巧
  • 用小程序做网站百度关键词指数
  • 湖州企业做网站阿里云域名注册官网网址
  • wordpress外贸站安卓优化大师旧版
  • 协会网站开发北京seo排名技术
  • 临沂网站制作哪家靠谱社群营销怎么做
  • 个人工商户做网站备案经典软文案例200字
  • wordpress广告模板下载怎样优化关键词到首页
  • 分销怎么做网站开发分销建站推广网站
  • 广州制作网站公司百度人工服务24小时热线电话
  • 购物网站建设和使用成都关键词seo推广平台
  • 修改wordpress中附件上传大小陕西seo顾问服务
  • 静态化网站的缺点链接制作软件
  • 刚做的网站怎么在百度上能搜到今日热点新闻头条国内
  • 桂林小学网站建设茶叶seo网站推广与优化方案
  • 建网站赚钱吗外链购买平台
  • jsp做的零食小网站如何建立自己的网站平台
  • 网站推广做百度还是360百度教育网站