2013-07-16 180 views
0

有时我需要遵循一个过程,我总是找到一个bash脚本做pid=$1。据我了解,它应该得到我发送给我创建的第一个shell实例的进程ID,该实例正在运行该特定进程,并且我可以稍后使用它(例如,杀死它,或者跟随内存使用情况,或者其他)。 pid=$0应该得到当前实例(bash)和pid=$!最新的一个。 (请正确的,如果我错了)正确获取进程ID

问题是:我每次需要运行pid=$1命令,pid将一无所获和echo $pidecho ${pid}打印和空行,我总是需要花哨的使用pid=$!做这件事的方式相反,因为它是唯一获取我的进程ID的东西。有谁知道我的终端为什么会这样? (它的发生无论是在Linux Mint的或Fedora的)

+0

'$ 0'和'$ 1'得到馈送给脚本(或函数)的位置参数。为了使这些成为PID,脚本/函数将需要通过PID作为参数。哦,'$ 0'可能永远不会是PID,因为它通常是脚本/函数的名称 - 实际参数以'$ 1'开头...... – twalberg

+0

@twalberg它只能在脚本文件中工作吗?我的意思是,如果我试图直接在终端上运行它,是不是应该工作? – rafa

+0

通常情况下,终端中运行的shell将被调用,不带任何参数,所以'$ 1'将是空的,'$ 0'将只包含您的shell的名称。不过,您可能已经使用'set'来改变它,所以请用例如“ 'echo“$ 1”'等等...... – twalberg

回答

4

$$应该给你的脚本PID

$PPID应该给你的调用者(家长)的pid评论


回答

sleep 100 & 
sleeppid=$! 
echo "PID=$sleeppid" 
+0

好吧,例如,如果我运行'sleep 100&',我怎么能得到这个pid os? – rafa

+0

'$!'看到答案例如 – Eun

+1

使用'$!'获取上次启动的后台进程的PID。 – anishsane