码迷,mamicode.com
首页 > 系统相关 > 详细

shell $$ 的详解

时间:2016-07-30 06:58:39      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:shell $$ 的详解

表面上的意思是: 当前bash的PID,但是各种shell环境中要理解透。


官方解释:

BASHPID

      Expands  to the process id of the current bash process.  This differs from

      $$ under certain circumstances, such as subshells that do not require bash

      to be re-initialized.


输出当前bash进程的pid。这是不同的在以下的情况中,例如没有获取到bash的子shell,将被重新初始化。


例子1: 

[andy@master ~]$ ps -ef |grep bash |grep -v grep

andy     30245 30244  0 Jul17 pts/0    00:00:00 -bash

[andy@master ~]$ echo $$

30245


注意: $$ 表示的是这个登入shell的进程ID(直接一andy用户ssh连接登入的shell)


[andy@master ~]$ 

例子2:

[root@master std]# ps -ef |grep bash

root      4422  4421  0 Jul23 pts/0    00:00:02 -bash

root     13791  4422  0 22:14 pts/0    00:00:00 grep --color=auto bash

andy     30245 30244  0 Jul17 pts/0    00:00:00 -bash

[root@master std]# echo $$          

4422



注意:$$表示的是登入交互式shell的PID(我本机是andy登入,然后sudo su - 到root的)



例子3:

[root@master std]# echo $$ 

4422

[root@master std]# cat test.sh 

#/bin/bash


echo "fei jiao hu shi shell‘S process pid:$$"

[root@master std]# sh test.sh  

fei jiao hu shi shell‘S process pid:13858


注意:这是非交互式shell,通过脚本执行的shell,$$ 就是这个pid



例子4:

[andy@master ~]$ echo $$

30245

[andy@master ~]$ echo "abc" | { echo "abc"; echo $$; }

abc

30245

[andy@master ~]$ 



注意: 管道中开辟的subshell,虽然是子shell环境,但是没有获得-bash进程的,所以依然是父进程的bashID。(这个有点绕,看看官方解释的那段英文就慢慢理解吧。)





本文出自 “学通信,第一份工作运维” 博客,请务必保留此出处http://cuidehua.blog.51cto.com/5449828/1831910

shell $$ 的详解

标签:shell $$ 的详解

原文地址:http://cuidehua.blog.51cto.com/5449828/1831910

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!