Bạn có thể sử dụng strace
, theo dõi tín hiệu và cuộc gọi hệ thống. Lệnh chờ đợi cho đến khi sau một chương trình được thực hiện, sau đó in mã lối ra của nó:
$ strace -e none -e exit_group -p $PID # process calls exit(1)
Process 23541 attached - interrupt to quit
exit_group(1) = ?
Process 23541 detached
$ strace -e none -e exit_group -p $PID # ^C at the keyboard
Process 22979 attached - interrupt to quit
--- SIGINT (Interrupt) @ 0 (0) ---
Process 22979 detached
$ strace -e none -e exit_group -p $PID # kill -9 $PID
Process 22983 attached - interrupt to quit
+++ killed by SIGKILL +++
Tín hiệu từ ^Z
, fg
và kill -USR1
được in quá. Dù bằng cách nào, bạn sẽ cần sử dụng sed
nếu bạn muốn sử dụng mã thoát trong tập lệnh trình bao.
Nếu quá nhiều mã shell, bạn có thể sử dụng program I hacked together in C một lúc trở lại. Nó sử dụng ptrace()
để bắt tín hiệu và mã thoát của pids. (Nó có các cạnh thô và có thể không hoạt động trong mọi tình huống.)
Tôi hy vọng điều đó sẽ hữu ích!
Có. Nhưng muốn thêm rằng bạn chỉ có thể chờ mã thoát của pid nếu pid đó là một trong số các con của bạn. –
Ah, cảm ơn @Apprentice Queue, tôi không biết điều đó. –
Điều này chỉ hoạt động trong trình bao mà từ đó quy trình gốc đã được gọi; không cho một quá trình tùy ý. –