jydg 发表于 2018-8-20 11:48:50

shell $$ 的详解

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

  Expandsto the process>  $$ under certain circumstances, such as subshells that do not require bash
  to be re-initialized.
  输出当前bash进程的pid。这是不同的在以下的情况中,例如没有获取到bash的子shell,将被重新初始化。
  例子1:
  $ ps -ef |grep bash |grep -v grep
  andy   30245 302440 Jul17 pts/0    00:00:00 -bash
  $ echo $$
  30245
  注意: $$ 表示的是这个登入shell的进程ID(直接一andy用户ssh连接登入的shell)
  $
  例子2:
  # ps -ef |grep bash
  root      442244210 Jul23 pts/0    00:00:02 -bash
  root   1379144220 22:14 pts/0    00:00:00 grep --color=auto bash
  andy   30245 302440 Jul17 pts/0    00:00:00 -bash
  # echo $$
  4422
  注意:$$表示的是登入交互式shell的PID(我本机是andy登入,然后sudo su - 到root的)
  例子3:
  # echo $$
  4422
  # cat test.sh
  #/bin/bash
  echo "fei jiao hu shi shell'S process pid:$$"
  # sh test.sh
  fei jiao hu shi shell'S process pid:13858
  注意:这是非交互式shell,通过脚本执行的shell,$$ 就是这个pid
  例子4:
  $ echo $$
  30245
  $ echo "abc" | { echo "abc"; echo $$; }
  abc
  30245
  $
  注意: 管道中开辟的subshell,虽然是子shell环境,但是没有获得-bash进程的,所以依然是父进程的bashID。(这个有点绕,看看官方解释的那段英文就慢慢理解吧。)

页: [1]
查看完整版本: shell $$ 的详解