【发布时间】:2018-10-20 19:20:47
【问题描述】:
我正在尝试用 C 语言实现简单的 shell,但我很难实现作业控制。网上的一切似乎都足够复杂,我认为简单一点总是好的。所以让我问这个......在调用 fork() 之后,我可以只用 2 个函数和 pid 处理 Ctrl-Z 信号吗?
我想调用一个函数,例如put_background(pid_t pid) 当我按下 Ctrl-Z 并使用 pid = pid 进行进程以运行后台并最终调用另一个函数 e.x. put_foreground(pid_t pid) 当我写 fg 并且我希望 pid = pid 的进程再次进入前台时。
那么,这可能吗?任何帮助表示赞赏.. 代码更多但是。
【问题讨论】:
-
Ctrl-Z 不在后台运行程序,它暂停它(通过发送
SIGTSTP)。 -
这不是重点,我可以随心所欲地处理信号,但是我可以只用 pid 在前景和背景之间切换吗?
-
我们是否假设您在谈论 POSIX 环境?因为标准 C 本身没有任何作业的概念,更不用说作业控制、分叉等等。这些东西在不同类型的环境中的工作方式不同,如果有的话。
-
@CharlesDuffy,我对前台和后台的描述完全不同:前台作业是具有控制终端并且当前有权读取它的作业。虽然它的父级很可能是一个 shell 并且在上面是
waiting,但这不是基本特征。 -
我必须同意——在这一点上,curiousthing.org/sigttin-sigttou-deep-dive-linux 可能是 OP 的有用资源。
标签: c pid job-control