[kwlug-disc] bash subprocesses & traps
William Park
opengeometry at yahoo.ca
Wed Aug 7 02:14:32 EDT 2024
It could be that, in
cat "$FIFO_FILE" & cat_pid=$!
cat "$FIFO_FILE" finishes too fast, and cat_pid=$! is pointing to PID
that has already ended.
On 2024-07-28 12:18, John Steel via kwlug-disc wrote:
> I’m having trouble figuring out how to manage a subprocess… I’m probably overcomplicating this…
>
> I’ve made a script called checksum.sh. I want it to keep moving data from a fifo to sha256sum until it’s terminated. But it seems when I kill it the cat and sha256sum are gone before my finalize method is called? If I can kill cat and let that sub shell exit gracefully I think I should see the sha256sum come out on stderr.
>
> #!/bin/bash
> # This is checksum.sh
>
> FIFO_FILE="${FIFO_FILE:-sha256sum_fifo}"
> CAT_PID_FILE="$(mktemp -p /dev/shm $$_cat_pid.XXXXXX)"
> export CAT_PID_FILE FIFO_FILE
> mkfifo "$FIFO_FILE"
>
> finalize() {
> pgrep -fl "cat fifo $FIFO_FILE" > /dev/stderr
> pgrep -fl sha256sum > /dev/stderr
>
> cat_pid="$(cat "$CAT_PID_FILE")"
> rm "$CAT_PID_FILE"
> kill -s SIGTERM "$cat_pid" && wait "$cat_pid"
> exit 0
> }
>
> trap finalize SIGTERM
> trap finalize SIGHUP
> trap finalize SIGINT
> trap finalize SIGQUIT
>
> # Start the cat process and capture its PID
> while [ -f "$CAT_PID_FILE" ]; do
> cat "$FIFO_FILE" & cat_pid=$!
> echo "$cat_pid" > "$CAT_PID_FILE"
> wait "$cat_pid"
> sleep 0.01
> done | sha256sum > /dev/stderr
>
> Here’s how I’m running it:
>
> docker run -it -v $PWD:/app alpine sh -xc '
> apk add bash procps
> export FIFO_FILE="$(mktemp -u -p /dev/shm fifo_$$.XXXXXX)"
> bash -x /app/checksum.sh &
> sleep 0.2
> jobs
> ps -ef --forest
> echo "First data to hash" > $FIFO_FILE
> sleep 0.2
> ps -ef --forest
> echo "More data to hash" > $FIFO_FILE
> kill %1
> sleep 1
> ‘
>
> Am I missing something obvious? If it’s possible without the loop that’d be great too but I found that if I connect sha256sum directly to the fifo it exits after the first write to the fifo.
>
> Should I learn how to use socat for this? From a few of the things I’ve read it sounds like it could make this simpler?
>
>
> _______________________________________________
> kwlug-disc mailing list
> To unsubscribe, send an email to kwlug-disc-leave at kwlug.org
> with the subject "unsubscribe", or email
> kwlug-disc-owner at kwlug.org to contact a human being.
More information about the kwlug-disc
mailing list