Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 为什么';echo$$';是否与流程的pid不同?_Shell - Fatal编程技术网

Shell 为什么';echo$$';是否与流程的pid不同?

Shell 为什么';echo$$';是否与流程的pid不同?,shell,Shell,这是我的密码 #include <unistd.h> int main(){ system("echo $$"); return 0; } $ ./a.out & [1] 29227 $ 29228 $ ./a.out & [1] 29107 $ 29108 #包括 int main(){ 系统(“echo$$”; 返回0; } 美元/年& [1] 29227 $ 29228 美元/年& [1] 29107 $ 29108 结果如上 为什么

这是我的密码

#include <unistd.h>

int main(){
    system("echo $$");
    return 0;
}


$ ./a.out &
[1] 29227
$ 29228

$ ./a.out &
[1] 29107
$ 29108
#包括
int main(){
系统(“echo$$”;
返回0;
}
美元/年&
[1] 29227
$ 29228
美元/年&
[1] 29107
$ 29108
结果如上


为什么它彼此不同?

当您执行
system()
时,操作系统会旋转(请参见man fork,也称为man execl)一个新进程一个原始进程的副本。然后,该过程加载您想要的新程序(本例中为shell),该程序将打印其pid。因此它们不同。

看起来像是
system()
创建了一个新的子进程。因为对
system()
的调用正在创建一个新进程。作为另一种解决方案,有些shell将使用$PPID,但一旦开始嵌套进程,获得正确的PID可能是一个技巧。祝你好运。但是我怎样才能在echo命令中展开我的参数呢?char*args[]={/bin/echo'、“-e”、“$$”;execv(args[0],args);不起作用这是一个有趣的问题,让我仔细检查了system(),谢谢!这里说:“system()通过调用/bin/sh-c命令来执行command中指定的命令”,因此旋转一个shell并“$$”是一个shell构造。直接运行/bin/echo时,将跳过shell对“$$”的解释