my-app &
echo $my-app-pid
但是我不知道如何获取刚刚执行的命令的pid。
我知道我可以只使用
jobs -p my-app
命令gpid pid。但是,如果我想多次执行外壳程序,则此方法将不起作用。因为jobspec含糊不清。#1 楼
最后执行的命令的PID在$!
shell变量中:my-app &
echo $!
#2 楼
获取PID
:#!/bin/bash
my-app &
echo $!
将
PID
保存在变量中:#!/bin/bash
my-app &
export APP_PID=$!
将所有实例
PID
保存在文本文件中: #!/bin/bash
my-app &
echo $! >>/tmp/my-app.pid
将输出,错误和
PID
保存在单独的文件中:#!/bin/bash
my-app >/tmp/my-app.log 2>/tmp/my-app.error.log &
echo $! >>/tmp/my-app.pid
echo "my-app PID's: $(cat /tmp/my-app.pid)"
评论
该问题并未询问重定向问题,因此您的答案与接受的答案基本相同,不同之处在于,如果my-app实例完成,并且可能更糟的是其PID稍后被重用,则您的信息将不正确。文件。我认为这个答案真的不能为现有的答案增加很多价值
–埃里克·雷诺夫(Eric Renouf)
16年1月22日在15:12
@EricRenouf帖子已更新!
–爱德华多·库莫(Eduardo Cuomo)
16年1月22日在15:42
另一个可能有用的派生词。这将获得PID,同时将其视为(主要是)前台进程:sleep 4 | grep无效并导出MY_PID = $ !; fg;回声$ MY_PID与$返回? `
– mlathe
18年4月26日在21:53
是不是APP = main和获取PID的方法?
– MrMesees
18年8月30日在7:54
#3 楼
尝试类似pidof my_app >> /tmp/my_app.pid
评论
外部命令,而且很慢,如果系统可以直接提供PID,为什么要搜索所有进程以找到它呢?而且,不能确定您会获得正确的价值
– papo
19年1月2日在8:13
#4 楼
尝试这样的操作: ps ef | grep "[m]y-app" | awk '{print }'
将过程的第一个字母放在
[
和]
之间可确保您不会在列表中得到grep
过程。如果需要,您还可以在用户名上添加grep。评论
这充其量是非常脆弱的,并且如果多次执行my-app则不起作用-davidshen84特别担心该cas。
–垫子
2012年1月30日12:10
如果您甚至走这条路线,也应该改用pgrep。
–威廉
2015年1月19日,12:41
评论
例如正在打印pid。 [1] 893。我只想要数字。
–user3153014
2014年9月4日11:47
应当指出,这代表了在后台启动的程序。如果尚未启动任何后台进程,则不会设置该参数。
– ramrunner
2014年11月17日下午21:52
在如何获得刚刚启动的进程的pid中,提出了另一个有价值的解决方案(对答案的评论):哦,还有“单行”:/ bin / sh -c'echo $$> / tmp / my.pid && exec program args'&– sysfault 2010年11月24日,14:28
– imz-伊万·扎哈拉里舍夫(Ivan Zakharyaschev)
2015年6月2日14:11在
@ user3153014启动后台任务后,shell会打印诸如“ [2] 2625”之类的字符串。这与echo $!的输出无关。
–彼得·格拉德基克(Petr Gladkikh)
15年7月26日在5:21
当我需要等到过程结束时,通常会在脚本中使用此类代码。 my-app和myVar = $! ; fg。 fg使该过程再次得到关注。然后,我可以稍后打印echo $ myVar,我很确定my-app已经完成。
– Vrata Blazek
19 Mar 4 '19 at 17:17