获取后台进程的退出代码

2024-05-01

我有一个从我的主 bourne shell 脚本中调用的命令 CMD,该命令需要很长时间。

我想修改脚本如下:

  1. 作为后台进程并行运行命令 CMD (CMD &).
  2. 在主脚本中,有一个循环每隔几秒监视生成的命令。该循环还向标准输出回显一些消息,指示脚本的进度。
  3. 当生成的命令终止时退出循环。
  4. 捕获并报告生成进程的退出代码。

有人可以指点我来完成这个任务吗?


1:在bash中,$!保存最后执行的后台进程的PID。无论如何,这会告诉您要监视哪些进程。

4: wait <n>等待直到有PID的进程<n>完成(它将阻塞直到进程完成,因此在确定进程完成之前您可能不想调用此函数),然后返回已完成进程的退出代码。

2, 3: ps or ps | grep " $! "可以告诉您该进程是否仍在运行。如何理解输出并决定它距离完成有多近取决于您。 (ps | grep不是防白痴的。如果您有时间,您可以想出一种更可靠的方法来判断进程是否仍在运行)。

这是一个骨架脚本:

# simulate a long process that will have an identifiable exit code
(sleep 15 ; /bin/false) &
my_pid=$!

while   ps | grep " $my_pid "     # might also need  | grep -v grep  here
do
    echo $my_pid is still in the ps output. Must still be running.
    sleep 3
done

echo Oh, it looks like the process is done.
wait $my_pid
# The variable $? always holds the exit code of the last command to finish.
# Here it holds the exit code of $my_pid, since wait exits with that code. 
my_status=$?
echo The exit status of the process was $my_status
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取后台进程的退出代码 的相关文章

  • ssh远程变量赋值?

    以下内容对我不起作用 ssh email protected cdn cgi l email protection k 5 echo k 它只是返回一个空行 如何在远程会话 ssh 上分配变量 Note 我的问题是not关于如何将本地变量传
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 如何在拥有句柄时检查给定进程是否正在运行

    我在用ShellExecuteEx启动应用程序 成功开始阅读后TShellExecuteInfo hProcess获取已启动进程的句柄 我想定期检查我的应用程序启动的进程是否仍在运行 两个或多个同名进程可以同时运行 我想确保我的应用程序正在
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph
  • waitpid() 的作用是什么?

    有什么用waitpid 它通常用于等待特定进程完成 或者如果您使用特殊标志则更改状态 基于其进程 ID 也称为pid 它还可用于等待一组子进程中的任何一个 无论是来自特定进程组的子进程还是当前进程的任何子进程 See here http l
  • android:进程和进程名称

    我试图理解android process属性 Ref says http developer android com guide topics manifest application element html proc 如果分配给该属性的
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • 非通用接口是通用接口的同义词

    我在 C 中有一个通用接口 并且几乎总是将它与其中一种类型一起使用 我想为该类型创建一个非通用接口并使用它 假设我有以下代码 public interface IMyGenericList
  • jquery:卸载还是卸载之前?

    当用户从当前页面导航时 我想向服务器发布一条消息 我现在正在使用 unload 但结果不可靠 即使在其文档中也是如此 卸载事件的准确处理 各个版本都有所不同 浏览器 例如 某些版本 Firefox 的触发事件当 链接已被跟踪 但当 窗口已关
  • 是 F# 映射上的迭代还是集合中序遍历?

    AFAIK F Map 和 set 被实现为红黑树 所以我猜这些的迭代将是有序遍历 我做了一些测试 迭代结果总是排序的 但我想确定一下 是按顺序遍历吗 MSDN 上的文档非常适合解决这个问题 例如 返回值Set toSeq http msd
  • 为什么/何时将运算符指定为显式很重要?

    我借用了下面的代码另一个问题 https stackoverflow com a 7305947 93394 稍作修改 在我的代码中使用 internal class PositiveDouble private double value
  • 预期的 catch() 或返回(promise/catch-or-return)

    我是 JavaScript 新手 这是我在 javascript 中第一个在 firebase 上部署函数的函数 得到这个错误 eslint Unexpected function expression prefer arrow callb
  • 处理在没有全局变量的情况下跨函数使用的变量

    所以我正在开发一个基本的文字游戏 你会得到一只字母 手 字典对象 你可以用它来创建单词并获得分数 这个 手牌 被用在许多函数的参数中 计算玩家的分数 在玩家使用一个或多个字母后更新手牌中的字母数量 显示手牌 检查玩家单词的有效性 ETC 从
  • 奇怪的 Atomikos 异常 - init() 中的错误:日志已在使用中?

    我们尝试在多个本地环境上运行相同的 Web 应用程序 该应用程序使用 Atomikos 作为事务管理器 每个环境都使用相同版本的 spring atomikos tomact 等 并具有相同的配置文件 其中一些工作正常 但其中之一 当我们尝
  • Spring Security 实体字段级安全

    我有一个 Spring MVC 应用程序 它提供了一个视图 其中显示了来自Customer实体 例如姓名 地址 电话号码等 该应用程序具有各种角色 例如ROLE USER and ROLE ADMIN 用户具有ROLE USER只能看到客户
  • Nginx反向代理(proxy_pass)不传递子文件夹

    我想在子文件夹配置中运行应用程序 Mattermost 例如 https www example com mattermost https www example com mattermost location mattermost gzi
  • 使用 Python 2.7 解析 msg/eml 文件

    有没有可以解析msg或eml文件的库 我编写了一个脚本 一旦将电子邮件转换为 txt 文件 就会对其进行解析 但是我找不到一个电子邮件客户端 可以让我轻松地将电子邮件从 gui 拖放到文件夹中作为 txt 文件 如果有人知道这一点 我会很高
  • 如何仅在表格内应用边框?

    我想弄清楚如何仅在表格内添加边框 当我做 table border 0 table td table th border 1px solid black 边框围绕整个表格以及表格单元格之间 我想要实现的是仅在表格单元格周围的表格内部有边框
  • Flutter Image 对象到 ImageProvider

    我必须从 base64 读取图像源才能进行 flutterImage https api flutter dev flutter widgets Image class html object Image img Image memory
  • Spring JPA - 通过 EmbeddedId 部分查找

    以下代码仅用于演示目的 My Entity豆看起来像这样 Entity class Employee EmbeddedId private EmployeeKey employeeKey private String firstName p
  • 与 ng-include 一起使用时自动对焦不起作用

    我想将焦点设置到部分视图中的输入框之一 喜欢 并包括这一点 当页面第一次加载时 这工作正常 但是当我更改部分时 自动对焦不起作用 我相信这是因为页面加载时的自动对焦工作 它如何在这里工作 我不确定如何解决页面重新加载的问题 但我认为我们可以
  • 哪个信号被传递到信号处理程序中死锁的进程

    我有一个来自调用信号处理程序后死锁的进程的核心转储 如何确定传送了哪个信号以及是谁发送的 GDB 为接收信号的线程生成的回溯如下 信号处理程序在第 15 帧中被调用 gdb bt 0 0x00007fa9c204654b in sys fu
  • Django查询连接两个表的记录

    我正在使用 django mssql 1 6 2 包和 django 1 7 从 sql server 2008 获取一条或多条表记录 当我如下调用 get 或 filter 时 一切都很好 但我的服务器程序非常慢 考虑下表 class C
  • 使用 KnitR 在 R 中以编程方式创建 Markdown 表

    我刚刚开始了解 KnitR 以及使用 Markdown 生成 R 文档和报告 这对于我与工作有关的许多日常报告来说似乎是完美的 然而 我没有看到的一件事是使用 Markdown 格式打印数据框和表格的简单方法 有点像xtable 但使用 M
  • 如何在没有 root 访问权限的情况下在 Ubuntu 上安装 Google Test?

    我正在尝试根据以下方式安装 Google Test这个答案 https stackoverflow com a 21314020 6560773在没有 root 访问权限的 Ubuntu 上 因为我需要在工作中学习和使用它 设法在我自己的用
  • 列出所有会话信息

    我想在页面中显示我的asp net页面 aspx 的所有会话信息 我怎样才能做到这一点 编程语言是C 这两种方法对我有用 稍微改进和纠正了大卫的答案 第一种方法 for int i 0 i lt Session Count i var cr
  • 获取后台进程的退出代码

    我有一个从我的主 bourne shell 脚本中调用的命令 CMD 该命令需要很长时间 我想修改脚本如下 作为后台进程并行运行命令 CMD CMD 在主脚本中 有一个循环每隔几秒监视生成的命令 该循环还向标准输出回显一些消息 指示脚本的进