process defer - execute a command after a specified process (by PID) exits
dm9pZCAq 052c6393d3 rename to `pd` | 5 mesi fa | |
---|---|---|
include | 10 mesi fa | |
.gitignore | 5 mesi fa | |
.gitmodules | 5 mesi fa | |
LICENSE | 1 anno fa | |
Makefile | 5 mesi fa | |
README.md | 5 mesi fa | |
pd.asm | 5 mesi fa | |
wait-parent.sh | 5 mesi fa |
process defer - execute a command after a specified process (by PID) exits
this is similar to the shell's builtin wait
, but it can wait for any pid, not just the child pid
(also it is similar to waitpid(1)
from util-linux
, but pd
was created before waitpid
existed)
NOTE: if no cmd
is provided, pd
always exits with 0 regardless of the PID exit status, but if a cmd
is provided, pd
will exit with the exit code of that cmd
pd <pid> [cmd]
pid process id to wait for
cmd optionall command to run with '/bin/sh' after <pid> exits
# standard wait can only wait for child processes
sleep 10 & wait "${!}"
# pd
pd 1 # wait for init to stop :)
sh ./wait-parent.sh
see also wait-parent.sh
to see what actually happens in this script use htop -t
and extrace -t
(extrace)
for example it can be used in swallow
script:
#!/bin/sh --
set -ue
id="$(xdo id)"
xdo hide "${id}"
ppid="${$}"
# shellcheck disable=2016
id="${id}" pd "${ppid}" 'exec xdo show "${id:?}"' &
exec "${@}"
x86_64
linux
build-time dependencies:
examples/x86/include
from fasmg
source
make FASMG=./path/to/fasmg-executable
this will create a static pd
executable of 1469
bytes in size and without any run-time dependencies other than the Linux kernel