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
Bash “工艺编号”给出的工艺编号是多少;回声及&引用;指挥部?_Bash_Shell - Fatal编程技术网

Bash “工艺编号”给出的工艺编号是多少;回声及&引用;指挥部?

Bash “工艺编号”给出的工艺编号是多少;回声及&引用;指挥部?,bash,shell,Bash,Shell,每次我跑步 echo & …返回不同的“过程编号”或PID 这些是干什么用的?为什么每次都不一样?&fork()s关闭shell的新副本(如果正在运行外部程序,则使用execve()将该shell副本替换为外部程序,但echo不是外部程序)。因此,当您运行echo&时,您将创建一个shell副本作为一个新进程;它运行echo,然后退出 每次在UNIX上启动一个新进程时(通过fork()ing或clone()ing一个现有进程来启动),该新进程都会在操作系统用来引用正在运行的程序的查找表

每次我跑步

echo &
…返回不同的“过程编号”或PID

这些是干什么用的?为什么每次都不一样?

&
fork()
s关闭shell的新副本(如果正在运行外部程序,则使用
execve()
将该shell副本替换为外部程序,但
echo
不是外部程序)。因此,当您运行
echo&
时,您将创建一个shell副本作为一个新进程;它运行
echo
,然后退出

每次在UNIX上启动一个新进程时(通过
fork()
ing或
clone()
ing一个现有进程来启动),该新进程都会在操作系统用来引用正在运行的程序的查找表中获得一个进程ID号作为条目;这就是你在这里看到的

进程ID是程序识别其他程序的句柄,包括向它们发送信号或检查它们的状态(例如,查看程序是否仍在运行;或者,如果程序退出,则查看它是如何死掉的)。有关需要提供PID才能运行的系统调用(操作系统级请求)的示例,请参阅或


PID的分配方式可以避免频繁的重用——这样您就不太可能意外地用
kill()
信号命中错误的程序(如果您打算针对的程序退出,然后启动了其他程序)。

这是一个非常简单的解释

shell允许用户键入命令以执行有用的操作。用户键入命令,按Enter键,执行命令,用户看到发生了什么,然后可以使用另一个命令重新启动

之所以会出现这种情况,是因为shell在接到执行命令的指令时,会启动命令并等待它终止。即使给shell一个要执行的命令列表(这样的命令列表位于一个文件中,称为脚本),这也是正确的

有些命令并不打算为用户提供有用的输出(例如,守护进程:它们在没有用户干预的情况下实现功能)。或者可能有其他原因/情况。。。用户希望在不等待命令完成的情况下执行命令;在守护进程的情况下,它们实际上永远不会自行终止

如果用户希望运行命令,但能够在命令运行时与shell交互,则可以在命令行中附加一个符号AND。表示“一起”的符号告诉shell启动命令,但等待命令终止-shell与被调用的命令同时工作(这并不意味着它们合作,事实上,它们不合作)

此时,用户知道他启动了一个正在运行的进程。但是,如果用户在一段时间后决定对该过程做些什么呢?他如何才能解决这个精确的过程,而不是另一个不同的过程?这就是shell打印刚刚调用的进程的进程ID(PID)的原因:这样用户就知道他启动的进程是哪个进程


查尔斯的回答很好地解释了OP每次看到不同数字的原因。当一个进程终止时,它的PID不再被使用,但系统会尝试暂时不(重新)使用相同的PID,因为系统中的某个(或某个人)可能仍然认为该进程是活动的,并试图杀死它或其他什么:试图杀死一个进程是不好的,就在系统将该过程替换为另一个…

之后,这可能比StackOverflow更合适(因此回答社区wiki而不是以我自己的名义,因为我认为该问题不在该站点的范围内)。如中所述,SO仅限于“软件开发特有”的问题;UNIX进程模型与所有用户相关,包括以交互方式使用Shell而根本不进行软件开发的用户。