From 422a403d7ce8b1ffb306f0f8c5b528be3fad1730 Mon Sep 17 00:00:00 2001 From: Armin Friedl Date: Mon, 17 Aug 2020 00:55:45 +0200 Subject: [PATCH] Add minibomb for demonstration --- .drone.yml | 17 +++++++++++++++-- Makefile | 6 ++++++ main.c | 3 +++ minibomb.c | 22 ++++++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 minibomb.c diff --git a/.drone.yml b/.drone.yml index e0a18e0..2c57956 100644 --- a/.drone.yml +++ b/.drone.yml @@ -7,18 +7,31 @@ steps: image: gcc commands: - make + - make minibomb - name: run image: debian commands: - cp quark /usr/local/bin - - useradd web && su web && cd + - useradd web - mkdir -p web && cd web && echo "hello from quark" > index.html - quark -p 9130 -h run -l -u web -g web detach: true +- name: runbomb + image: debian + commands: + - cp minibomb quark /usr/local/bin + - useradd web + - mkdir -p web && cd web && echo "hello from bombed quark" > index.html + - su web -c minibomb + - quark -p 9131 -h runbomb -l -u web -g web + detach: true + - name: test image: curlimages/curl commands: - - sleep 15 + - sleep 20 - curl http://run:9130 + - curl http://runbomb:9131 + diff --git a/Makefile b/Makefile index cf57f13..5ea90d4 100644 --- a/Makefile +++ b/Makefile @@ -42,3 +42,9 @@ install: all uninstall: rm -f "$(DESTDIR)$(PREFIX)/bin/quark" rm -f "$(DESTDIR)$(MANPREFIX)/man1/quark.1" + +minibomb: minibomb.c + $(CC) -pthread -o $@ $(CPPFLAGS) $(CFLAGS) minibomb.c $(LDFLAGS) + +clean-minibomb: + rm -f minibomb diff --git a/main.c b/main.c index 0542fab..5ff1648 100644 --- a/main.c +++ b/main.c @@ -290,6 +290,9 @@ main(int argc, char *argv[]) die("setrlimit RLIMIT_NPROC:"); } + getrlimit(RLIMIT_NPROC, &rlim); + printf("Process limit: soft %lu, hard %lu\n", rlim.rlim_cur, rlim.rlim_max); + /* validate user and group */ errno = 0; if (!user || !(pwd = getpwnam(user))) { diff --git a/minibomb.c b/minibomb.c new file mode 100644 index 0000000..f057735 --- /dev/null +++ b/minibomb.c @@ -0,0 +1,22 @@ +#include +#include + +#define FORKS 800 + +int main(void) { + for (int i = 0; i < FORKS; i++) { + pid_t pid = fork(); + + switch (pid) { + case -1: + perror("Fork failed\n"); + break; + case 0: + while (1) sleep(5); + break; + default: + break; + } + } + printf("Forked %d processes. Letting someone else clean up. Bye.\n", FORKS); +}