How to get return value from CHILD PROCESS? How to get return value from CHILD PROCESS? unix unix

How to get return value from CHILD PROCESS?


Oops! This isn't bash! Anyway...

The reason for spawning a process is to continue the main flow, doing something meanwhile that doesn't affect that. I'm running through directories of 10k images, & moving out duplicates. I put the compare code in a function & subprocess that. It's very fast.

The way to get a value back is to create a pipe, echo a value onto that then read the pipe: ( Warning! the following code probably doesn't work, it just shows a working pipe)

mkfifo pipemoved=0# Use imageMagick 'compare' to find files with zero difference:comPare () {  if [[ ! $(compare -metric AE $1 $2) ]]; then     mv $2 moved;    echo 1 > pipe;  else echo 0 > pipe  fi}# For every file in the dir, compare it to every other one:for file1 in $( ls *.bmp | head -n $(( $( ls *.bmp | wc -l) - 1)); dofor file2 in $( ls *.bmp | tail -n $(( $( ls *.bmp | wc -l) - 1)); do    comPare file1 file2 &    moved=$(( $(cat pipe) + 1 ))donedonerm pipeecho "Moved $moved files"

The only problem so far is that I'm working on a usb drive, & permissions are stopping me from creating the pipe. Apart from that ...


Like dtmilano said you should use wait or waitpid, depending or need.

But maybe you should split your program in two parts and execute the son with exec. When you make fork your child process receive pid equal 0 and I don't know if you try to wait signals of process with pid 0 will work fine.

Anyway you can pass, though it's not the best way, the value calculated by your child process through exit.