相关疑难解决方法(0)

控制 Ctrl+C 取消哪个进程

我有一张可以启动到 Linux 并运行一个小的 Bash 脚本的 live CD。该脚本搜索并运行第二个程序(通常是编译后的 C++ 二进制文件)。

您应该能够通过按Ctrl+来中止第二个程序C。什么应该发生的是,第二个节目暂停,和bash脚本运行继续清理。什么实际发生的是主应用程序和bash脚本都终止。这是一个问题。

所以我使用trap内置命令告诉 Bash 忽略 SIGINT。现在Ctrl+C终止 C++ 应用程序,但 Bash 继续运行。伟大的。

哦,是的...有时“第二个应用程序”是另一个 Bash 脚本。在这种情况下,Ctrl+C现在什么都不做

显然我对这些东西如何工作的理解是错误的......当用户按下Ctrl+时,我如何控制哪个进程获得 SIGINT C?我想将此信号定向到一个特定的进程

bash signals

15
推荐指数
1
解决办法
7805
查看次数

退出外壳后后台作业会发生什么?

从我的理解,工作是管道从某一个shell启动的,你可以管理这些作业(fgbg,按Ctrl-Z)从该壳体内。一个作业可以由多个进程/命令组成。

我的问题是当原始的包含 shell 退出时这些作业会发生什么?假设未设置 huponexit 以便后台进程在 shell 退出后继续运行。

假设我已经做了:

$ run.sh | grep 'abc' &
[1] job_id
Run Code Online (Sandbox Code Playgroud)

然后我退出这个shell。我将进入一个新的 shell 并运行jobs,但显然什么也看不到。但是我可以执行ps aux | grep run.sh并查看此进程的运行情况,我也会执行ps aux | grep grep并查看grep 'abc'运行的进程。

有没有办法只获取完整管道的作业 ID,以便我可以一次性杀死它,或者我是否必须在退出原始 shell 后与另一个 shell 分开杀死所有进程?(我尝试过后者并且它有效,但跟踪所有过程似乎很麻烦。)

shell process kill jobs

10
推荐指数
2
解决办法
1万
查看次数

标签 统计

bash ×1

jobs ×1

kill ×1

process ×1

shell ×1

signals ×1