当你在vim中快速编辑的时候,你想要执行几个bash命令,比如说
cd到某个目录,查看当前目录,然后再创建个文件夹
但是你又不想退出vim,又不想在vim的命令行使用
:!命令
的方式,因为这样不方便,尤其输入很长的命令的时候。
还有最为快捷的方式:
shift+k
另外一种方式:
这时候可以使用vim的sh命令,
:sh
直接切换到bash,完成之后在exit就退回到vim中了。
这个过程实际上是启动了一个bash进程,它属于vim的子进程。
但是这个来回切换的过程中,我们就会忘了,我们到底进行了几次vim的sh和bash的exit,这个很像一个栈的操作,进栈和出栈。有一次我弄乱了这个进栈和出栈的平衡,进栈次数太多,也就是太多了,vim然后vim sh,结果一个文件被多个vim打开。
那么怎么知道我们进栈和出栈是否平衡,没有形成
bash->vim->bash->vim->bash
这样进程树呢?下面是我们希望的
bash->vim->bash
退栈后
bash->vim
进栈又变成
bash->vim->bash
在linux中我们的bash也是一个进程,所有的进程都有自己的父进程,除了init这个进程,形成了一个以init根的进程树,这样我们可以打印出这个进程树,看看我们当前bash对应的进程在什么位置。
每个进程对应一个进程号码,通过这个号码和打印出的进程号码匹配。
我们想想是不是先需要知道 当前bash所对应的进程号码通过
echo $$
命令可以得出。
打印进程树我们不用pstree因为这个命令只能答应出名字,不能打印出进程号码,我们用
ps auxf
关进是f这个选项,打印进程树的关键,我们再结合grep命令
ps auxf | grep $$
如果输出结果是
ps auxf | grep $$
\_ bash
说明是init的子进程
\_ bash说明是另外一个进程的子进程
注意前面是一个空格
\_ bash 说明是一个进程的子进程的子进程
聪明的你一定总结出来,前面的空格数说明了,子进程的层数。
或者你先用
echo $$
得到子进程号码,然后用
ps auxf
肉眼查看
完
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.