about summary refs log tree commit diff
path: root/fail.c
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2018-01-21 16:26:30 +0100
committerLeah Neukirchen <leah@vuxu.org>2018-01-21 16:26:30 +0100
commit3a867c9ba4f41dad6c67a1a08792b358f328c54b (patch)
treeb1a78317a86069785124441284edbbd7c81c899c /fail.c
parent2dda99039012b3605bda62d2373d526d914a6855 (diff)
downloadfail-3a867c9ba4f41dad6c67a1a08792b358f328c54b.tar.gz
fail-3a867c9ba4f41dad6c67a1a08792b358f328c54b.tar.xz
fail-3a867c9ba4f41dad6c67a1a08792b358f328c54b.zip
add -D to generate a process in uninterruptible sleep
Diffstat (limited to 'fail.c')
-rw-r--r--fail.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/fail.c b/fail.c
index f586ba8..6e986ee 100644
--- a/fail.c
+++ b/fail.c
@@ -10,6 +10,7 @@
 
 #include <fcntl.h>
 #include <signal.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 
@@ -34,6 +35,15 @@ dlcrash()
 		*nullp = 1337;
 }
 
+void
+uninterruptible()
+{
+	printf("pid %d is now in state D\n", getpid());
+	vfork();
+	pause();
+	exit(1);
+}
+
 // can lockup your machine
 void
 oom()
@@ -122,11 +132,12 @@ main(int argc, char *argv[])
 {
 	int c;
 
-	while ((c = getopt(argc, argv, "123Oacdikrst")) != -1) {
+	while ((c = getopt(argc, argv, "123DOacdikrst")) != -1) {
 		switch (c) {
 		case '1': exit(-1); break;
 		case '2': exit(2); break;
 		case '3': exit(111); break;
+		case 'D': uninterruptible(); break;
 		case 'O': oom(); break;
 		case 'a': abortme(); break;
 		case 'c': violate_seccomp(); break;