bash – 获取当前的子shell
我正在尝试获取当前执行的subshel??l的pid,但是$$只返回父pid:
#!/usr/bin/sh x() { echo "I am a subshell x echo 1 and my pid is $$" } y() { echo "I am a subshell y echo 1 and my pid is $$" } echo "I am the parent shell and my pid is $$" x & echo "Just launched x and the pid is $! " y & echo "Just launched y and the pid is $! " wait 产量 I am the parent shell and my pid is 3107 Just launched x and the pid is 3108 I am a subshell x echo 1 and my pid is 3107 Just launched y and the pid is 3109 I am a subshell y echo 1 and my pid is 3107 如上所述,当我从我背景的函数中运行$$时,它不会像我做$时显示PID一样!从父壳.
现代bash
如果您正在运行bash v4或更高版本,则子shell的PID可在$BASHPID中使用.例如: $echo $$$BASHPID ; ( echo $$$BASHPID ) 32326 32326 32326 1519 在主shell中,$BASHPID与$$相同.在子shell中,它被更新为子shell的PID. 旧的bash(3.x或更早版本) 前版本4,你需要一个workaround: $echo $$; ( : ; bash -c 'echo $PPID' ) 11364 30279 (帽子提示:kubanczyk) 为什么结肠? 注意,没有冒号,解决方法不起作用: $echo $$; ( bash -c 'echo $PPID' ) 11364 11364 看来,在上文中,从不创建一个subshel??l,因此第二个语句返回主shell的PID.相比之下,如果我们在括号内放置两个语句,则会创建subshel??l,并且输出符合我们的预期.即使另一个声明只是一个冒号,这是真的:.在shell中,这是一个无操作:它什么都不做.然而,在我们的情况下,它强制创建足以完成我们想要的子shell. 短跑 在debian类系统上,破折号是默认shell(/ bin / sh). PPID方法适用于破折号,但又有另一个扭曲: $echo $$; ( dash -c 'echo $PPID' ) 5791 5791 $echo $$; ( : ; dash -c 'echo $PPID' ) 5791 5791 $echo $$; ( dash -c 'echo $PPID'; : ) 5791 20961 用破折号,在命令之前放置:命令是不够的,但放在后面. POSIX PPID包含在POSIX specification中. 可移植性 mklement0报告以下工作原理与bash,dash和zsh但不是ksh: echo $$; (sh -c 'echo $PPID' && :) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angularjs – 在标签内部重复信息的最佳方法
- bootstrap入门
- 利用反射解决版本兼容问题[讨论]
- 了解Scala块
- .bashrc break,在shell中输入的第二行吃掉了第一行
- angular – 如何使用ResolveComponentFactory()但使用字符串
- 什么是“反射式访问结构型成员方法应该启用…”警告意味着在
- scala – 单个对象的protected [package]和private [packag
- -bash:cordova:command not found;或者-bash:phonegap:
- angularjs – Angular ui-router似乎在加载时自动重写url