diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2012-05-09 20:31:35 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2012-05-09 20:31:35 +0300 |
commit | a59319732d89feda419acab674ea580c95db7d4a (patch) | |
tree | 3d30595e8f50cb1b486c9f61f93a498834c22842 /test/fork2.awk | |
parent | 8ff0b4eaa7592280b5a55087c0326c6ef1f88db5 (diff) | |
parent | c41908d0b02f7746a67ab7aa2e54058e5b66439a (diff) | |
download | egawk-a59319732d89feda419acab674ea580c95db7d4a.tar.gz egawk-a59319732d89feda419acab674ea580c95db7d4a.tar.bz2 egawk-a59319732d89feda419acab674ea580c95db7d4a.zip |
Merge branch 'xgawk'
Diffstat (limited to 'test/fork2.awk')
-rw-r--r-- | test/fork2.awk | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/test/fork2.awk b/test/fork2.awk new file mode 100644 index 00000000..bd364286 --- /dev/null +++ b/test/fork2.awk @@ -0,0 +1,35 @@ +@load "fork" + +BEGIN { + # avoid instantiating PROCINFO prior to the fork + switch (pid = fork()) { + case -1: + printf "Error: fork failed with ERRNO %s\n", ERRNO + exit 1 + case 0: + # child + fn = ("fork.tmp." PROCINFO["pid"]) + printf "pid %s ppid %s\n", PROCINFO["pid"], PROCINFO["ppid"] > fn + exit 0 + default: + # parent + erc = 1 + fn = ("fork.tmp." pid) + if ((rc = wait()) < 0) + printf "Error: wait failed with ERRNO %s\n", ERRNO + else if (rc != pid) + printf "Error: wait returned %s instead of child pid %s\n", rc, pid + else if ((getline x < fn) != 1) + printf "Error: getline failed on temp file %s\n", fn + else { + expected = ("pid " pid " ppid " PROCINFO["pid"]) + if (x != expected) + printf "Error: child data (%s) != expected (%s)\n", x, expected + else if ((rc = system("rm " fn)) != 0) + printf "Error removing temp file %s with ERRNO %s\n", fn, ERRNO + else + erc = 0 + } + exit erc + } +} |