【发布时间】:2020-03-25 12:47:38
【问题描述】:
我正在尝试根据不同的用户输入从父进程向子进程发送一些信号(例如 SIGSTOP、SIGUSR1)。父进程不断等待用户输入并将相应的信号发送给子进程。如果没有用户输入,孩子会自己做事。
我将我的 Ocaml 代码放在这里,但我不确定我使用了正确的方法。 我正在使用 OCaml 编写,但也欢迎使用其他语言(例如 C/Python)的解决方案。
let cr, pw = Unix.pipe () in
let pr, cw = Unix.pipe () in
match Unix.fork () with
| 0 -> (* child *)
Unix.close pr;
Unix.close pw;
Unix.dup2 cw Unix.stdout;
Unix.execvp ... (* execute something *)
| pid -> (* parent *)
Unix.close cr;
Unix.close cw;
Unix.dup2 pr Unix.stdin;
while true do
try
match Unix.select [pr] [] [] 0.1 with
| ([], [], []) -> (* no user input *)
(* I assume it should do next iteration and wait for next user input *)
raise Exit
| (_, _, _) -> (* some user input *)
let i = read_int () in
(* send signal to the child process *)
if i = 1 then Unix.kill pid Sys.sigstop
else if i = 2 then Unix.kill pid Sys.sigusr1;
with Exit -> ()
done
同时,如果我想定义一些信号(使用 SIGUSR1),我应该如何以及在哪里做呢?
谢谢!
【问题讨论】:
标签: process ocaml signals fork