【问题标题】:Mac Terminal Open Command - Save PID of Opened Application?Mac 终端打开命令 - 保存打开的应用程序的 PID?
【发布时间】:2017-08-31 04:18:05
【问题描述】:

我想在终端中打开一个 xcode 工作区,等待一段时间,然后关闭该工作区(xcode 对项目有一些隐藏的魔力,因此在自动构建过程中需要这样做)。

比如——

pid=`open proj.xcworkspace`
sleep 30
kill $pid

因为多个 xcode 项目可能同时运行。我不能简单地杀死 xcode,只是我启动的进程。

如何获取我在终端中打开的应用程序的 PID?

【问题讨论】:

  • open 不一定会启动新进程。如果应用程序已经在运行,现有进程只会发送一个事件,告诉它打开文档。 (您可以使用 -n 选项覆盖它,但并非所有应用程序都能很好地处理多个实例。我不希望 Xcode 能很好地应对。)看起来 Xcode 的 AppleScript 接口支持您正在尝试做的事情。 workspace document 类的文档中甚至还有一个相关示例。

标签: xcode macos unix


【解决方案1】:

您可以使用$$ 捕获当前的Process ID

或者您可以使用ps -C PROGRAMM_NAME -o pid= 搜索Process IDs

suleiman@antec:~$ ps -C icedove -o pid=
 887

suleiman@antec:~$ ps -C vlc -o pid=
29405

加法...

这是我的意思的一个工作示例......

#!/bin/bash

i=0
while [ "$i" -le 10 ]
do
    example.sh &
    Pid[$i]=$(ps -C "example.sh" -o "pid=")
    Pid[$i]=$(echo "${Pid[$i]}" | tail -n 1)
    #echo "${Pid[$i]}"
    i=$(($i +1))
done

for PID in "${Pid[@]}"
do
    kill "$PID"
done
exit 0

【讨论】:

  • 我不需要当前进程 ID。我只想杀死许多可能实例中的一个实例。我认为这没有帮助。
  • 你可能不需要$$,但另一个例子应该适合你的需要。
  • 仍然不确定。我有 2 个 xcode 实例正在运行。我打开另一个 xcode 实例。如何关闭我刚刚打开的实例而不关闭其他实例?
  • 每个进程都有自己的ID...您需要通过pstop 获取该ID,并将其放入变量或文件中。你已经知道的kill 命令。只是测试它。开始时,您需要知道进程的名称。就是这样。
  • 你没有告诉我任何我不知道的事情。显然我正在尝试以编程方式执行此操作。如果我有多个进程运行同一个应用程序,则使用 ps 或 top 不会挑出我刚刚打开的进程。
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 2020-10-01
  • 2019-09-08
相关资源
最近更新 更多