opnsense-src/tools/test/stress2/misc/pdfork.sh
Peter Holm 8a272653d9 stress2: Initial import
Discussed with:	 kib
2021-03-03 15:11:40 +01:00

58 lines
1.2 KiB
Bash
Executable file

#!/bin/sh
# truss / pdfork regression test.
# Test scenario by: Ryan Stone rstone@, slightly mangled by pho@
# Interruptable hang seen:
# $ ps -lp992
# UID PID PPID CPU PRI NI VSZ RSS MWCHAN STAT TT TIME COMMAND
# 1001 992 991 0 27 0 4168 1908 - TX+ 0 0:00.00 /tmp/pdfork -p
# $
cat > /tmp/pdfork.c <<EOF
#include <sys/types.h>
#include <sys/procdesc.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <err.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int
main(int argc, char **argv)
{
pid_t pid;
int fd;
if (argc > 1 && strcmp(argv[1], "-p") == 0) {
pid = pdfork(&fd, 0);
} else {
pid = fork();
}
if (pid == 0) {
sleep(1);
exit(0);
} else if (pid < 0) {
err(1, "fork() failed");
} else {
int status = 0;
if (argc > 1 && strcmp(argv[1], "-p") != 0) {
int error = wait4(pid, &status, WEXITED, NULL);
if (error < 0)
err(1, "wait4 failed");
}
exit(status);
}
}
EOF
cc -o /tmp/pdfork -Wall -Wextra -O2 /tmp/pdfork.c || exit 1
timeout 20s truss -f /tmp/pdfork 2> /dev/null; s1=$?
timeout 20s truss -f /tmp/pdfork -p 2> /dev/null; s2=$?
rm -f /tmp/pdfork /tmp/pdfork.c
return $((s1 + s2))