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

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

相关文章:

  • Struts1.x 跨站脚本(XSS)漏洞的解决
  • 综合应用WPF/WCF/WF/LINQ之三十:代码生成器之DBMLToDAL
  • Cocos Creator 音频API控制调频
  • OpenGL ES 之对各种坐标系统的记录理解
  • Git 仓库结构 (二)***
  • 使用WCF Test Client(WcfTestClient.exe) 来测试WCF
  • Internet Connectivity Evaluation Tool
  • CCF201412-2 Z字形扫描 java(100分)
  • [SoftGrid 系列] Microsoft SoftGrid Server 安装篇
  • 只有rman的备份文件恢复过程
  • Perl脚本学习笔记(一)
  • func 安装之艰辛历程
  • SoapUI实践:自动化测试、压力测试、持续集成
  • linux命令之wget
  • 关于同一线程两次调用EnterCriticalSection的测试
  • 分享的文章《人生如棋》
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • bootstrap创建登录注册页面
  • Gradle 5.0 正式版发布
  • happypack两次报错的问题
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • npx命令介绍
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue2.0 实现互斥
  • webpack入门学习手记(二)
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 数组的操作
  • 一天一个设计模式之JS实现——适配器模式
  • 走向全栈之MongoDB的使用
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 带你开发类似Pokemon Go的AR游戏
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # 数据结构
  • #、%和$符号在OGNL表达式中经常出现
  • #Java第九次作业--输入输出流和文件操作
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $forceUpdate()函数
  • (3)选择元素——(17)练习(Exercises)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (二)PySpark3:SparkSQL编程
  • (二十四)Flask之flask-session组件
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (三)终结任务
  • (四)Controller接口控制器详解(三)
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Linux下编译安装log4cxx
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET 8.0 发布到 IIS
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?