Compare commits
3 commits
master
...
resource-d
Author | SHA1 | Date | |
---|---|---|---|
d38603dc0e | |||
0144e4c783 | |||
422a403d7c |
4 changed files with 57 additions and 11 deletions
17
.drone.yml
17
.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
|
||||
|
||||
|
|
6
Makefile
6
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
|
||||
|
|
23
main.c
23
main.c
|
@ -285,16 +285,21 @@ main(int argc, char *argv[])
|
|||
}
|
||||
|
||||
/* raise the process limit */
|
||||
rlim.rlim_cur = rlim.rlim_max = maxnprocs;
|
||||
if (setrlimit(RLIMIT_NPROC, &rlim) < 0) {
|
||||
die("setrlimit RLIMIT_NPROC:");
|
||||
}
|
||||
if (getrlimit(RLIMIT_NPROC, &rlim) < 0) {
|
||||
die("getrlimit RLIMIT_NPROC:");
|
||||
}
|
||||
|
||||
/* validate user and group */
|
||||
errno = 0;
|
||||
if (!user || !(pwd = getpwnam(user))) {
|
||||
die("getpwnam '%s': %s", user ? user : "null",
|
||||
errno ? strerror(errno) : "Entry not found");
|
||||
rlim.rlim_cur = MAX(rlim.rlim_cur, maxnprocs);
|
||||
rlim.rlim_max = MAX(rlim.rlim_max, maxnprocs);
|
||||
if (setrlimit(RLIMIT_NPROC, &rlim) < 0) {
|
||||
die("setrlimit RLIMIT_NPROC:");
|
||||
}
|
||||
|
||||
/* validate user and group */
|
||||
errno = 0;
|
||||
if (!user || !(pwd = getpwnam(user))) {
|
||||
die("getpwnam '%s': %s", user ? user : "null",
|
||||
errno ? strerror(errno) : "Entry not found");
|
||||
}
|
||||
errno = 0;
|
||||
if (!group || !(grp = getgrnam(group))) {
|
||||
|
|
22
minibomb.c
Normal file
22
minibomb.c
Normal file
|
@ -0,0 +1,22 @@
|
|||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#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);
|
||||
}
|
Loading…
Reference in a new issue