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。(这个有点绕,看看官方解释的那段英文就慢慢理解吧。)

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1831910如需转载请自行联系原作者


cuizhiliang

相关文章
|
4月前
|
存储 Unix Shell
Shell
Shell
35 0
|
Shell
SHELL练习
1.你需要打印一个给定的数字的反序,如输入10572,输出27501,如果没有输入数据,应该抛出错误和使用脚本说明。
63 0
|
9月前
|
Unix Shell
Shell 联机帮助
Shell 联机帮助
47 0
|
9月前
|
Shell 程序员
Shell 替代
Shell 替代
33 0
|
10月前
|
安全 Shell Linux
强大好用的shell:什么是shell?
系统内核是操作系统的基本组成部分,它负责管理系统的硬件和软件资源,并提供一组基本的系统服务。内核是操作系统的核心,控制着计算机的所有主要功能,包括内存管理、进程管理、设备驱动程序、系统调用和安全防护等。内核在计算机中扮演着重要的角色,它为用户空间的应用程序提供访问硬件资源的接口,并通过进程间通信机制及系统调用来完成这些操作。内核的设计和实现对于操作系统的性能和稳定性有着至关重要的影响。
|
机器学习/深度学习 Shell Linux
shell
shell
79 0
|
存储 机器学习/深度学习 搜索推荐
shell小结
Shell小小总结,曾经的爱,一路相伴。
shell小结
|
网络协议 Shell Perl
shell 常用
./sss xxx $1 $2 $# $0 $? tail -1 head -1 awk '{ if ($1=="FIND") print $2 }' 如何调试bash脚本 #!/bin/bash -xv function aa(){ echo "xx" } let $a=$b+$c $a=(($b+$c)) if[ -f /xx/xx ] then xxx fi for i in $(ls) do ccc done head -10 xx|tail -1 命令“export” 有什么用 ? 使变量在子shell 中可用。
975 0