Bash

是否可以在 bash 中將程序添加到作業列表中(例如反轉“拒絕”)?

  • January 24, 2016

如果我disown工作bash並改變主意,我可以以某種方式撤消它嗎?

如果是這樣,更進一步,是否可以將任意流程置於作業控制之下(可接受的限制是我擁有該流程)?

最後,這是否會使以下工作流程成為可能:

  • 將工作置於後台(^z後跟bg
  • 獲取它的 pid(jobs -p %+獲取它的<pid>
  • 打開一個screentmux會話,附加到它並將其用於以下步驟
  • 用來reptyr搶工作(reptyr <pid>
  • 添加<pid>到 shell 的作業控制(這可能嗎?
  • 停止工作 ( ^Z)

除了最後兩個步驟,我什麼都能做。停止作業^Z不起作用,因為該程序不在 shell 的作業列表中。

我的研究表明不可能擁有(反向disown)pid,但希望我錯了……

一般來說,shell 不可能“採用”一項工作。對於 shell,工作意味著幾件事:

  • 將作業標識符與程序 ID 相關聯。
  • 顯示其狀態(執行、掛起、當機)。
  • 當狀態改變時通知使用者。
  • 當終端離開時發送一個 SIGHUP 信號。
  • 控製作業是否“擁有”終端(是否是前台程序組)。

其中大多數不需要 shell 和作業之間的任何特殊關聯,但有一些是這樣做的:

  • 為了在狀態更改時通知使用者,shell 依賴於接收SIGCLD 信號。該信號由核心發送給作業初始程序的父程序。
  • 為了控制對終端的訪問,shell 需要與作業在同一個會話中。

一個程序不可能採用另一個程序,也不能將一個程序附加到現有會話。因此,為了支持採用,shell 必須管理部分狀態。通常的 shell 沒有實現這一點。

在特殊情況下,工作最初是由該 shell 啟動然後被拒絕的,這些問題不會出現。但是,沒有一個常用的 shell 實現了異常的異常,如果他們最初啟動了一個作業,就可以添加一個作業。

在您的場景中,在 screen 或 tmux 會話中啟動作業通常最方便,如果您想暫停或恢復它,則使用 PID。

引用自:https://unix.stackexchange.com/questions/215643