得到pid in shell(bash)

 再见傻瓜傻瓜_299 发布于 2023-02-04 14:16

我有Bash的问题,我不知道为什么.
在shell下,我输入:

echo $$    ## print 2433
(echo $$)  ## also print 2433
(./getpid) ## print 2602

"getpid"是一个获取当前pid的C程序,如:

   int main() {
    printf("%d", (int)getpid());
    return 0;
   }

令我困惑的是:

    我认为"(命令)"是一个子流程(我是对的吗?),我认为它的pid应该与它的父pid不同,但它们是相同的,为什么......

    当我使用我的程序在括号之间显示pid时,它显示的pid是不同的,是不是?

    '$$'就像宏?

你能帮助我吗?

3 个回答
  • $$被定义为在子shell中返回父进程的进程ID; 从"特殊参数"下的手册页:

    $扩展为shell的进程ID.在()子shell中,它扩展为当前shell的进程ID,而不是子shell.

    bash4中,您可以获取子项的进程ID BASHPID.

    ~ $ echo $$
    17601
    ~ $ ( echo $$; echo $BASHPID )
    17601
    17634
    

    2023-02-04 14:18 回答
  • 您可以使用以下之一.

    $! 是最后一个后台进程的PID.

    kill -0 $PID 检查它是否仍在运行.

    $$ 是当前shell的PID.

    2023-02-04 14:18 回答
    1. 括号在Bash中调用子shell.由于它只是一个子shell,它可能具有相同的PID - 取决于实现.

      您调用的C程序是一个单独的进程,它有自己唯一的PID - 如果它在子shell中则无关紧要.

      $$是Bash中当前脚本PID的别名.见之间的差异$$,并$BASHPID在这里,和正上方的额外变量$BASH_SUBSHELL包含嵌套级别.

    2023-02-04 14:18 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有