-
-
Save rofl0r/6168719 to your computer and use it in GitHub Desktop.
#define _XOPEN_SOURCE 700 | |
#include <signal.h> | |
#include <unistd.h> | |
int main() | |
{ | |
sigset_t set; | |
int status; | |
if (getpid() != 1) return 1; | |
sigfillset(&set); | |
sigprocmask(SIG_BLOCK, &set, 0); | |
if (fork()) for (;;) wait(&status); | |
sigprocmask(SIG_UNBLOCK, &set, 0); | |
setsid(); | |
setpgid(0, 0); | |
return execve("/etc/rc", (char *[]){ "rc", 0 }, (char *[]){ 0 }); | |
} |
For those confused, all this code does is:
- Get the process ID of the current process.
- If the process ID is not 1, return 1 (error).
- Fill the signal set with all current signals.
- Block all signals via the
SIG_BLOCK
constant. - If a fork is successful, wait for the child to exit.
- Unblock all signals.
- Set the session ID of the process to the process ID.
- Execute the
/etc/rc
script.
Is it not possible to straight up execute the /etc/rc script? Just by adding init=/etc/rc to the kernel command line?
Just go outside instead of turning on your computer. It uses 0B of disk space
I'm 100% sure this is way too slow. We need to write this in assembly. So that it'll fit in 1 sector of a drive.
I like shell scripts that don't need to be recompiled... A mount -a && /etc/rc
works just fine
Is it not possible to straight up execute the /etc/rc script? Just by adding init=/etc/rc to the kernel command line?
You need a always running daemon, who will be reap a zombie. It is single work for init.
If you redirect this job to /etc/rc, you got a systemd again.
You cannot start an another daemon from /etc/rc for this. Zombie go to process with PID 1. /etc/rc have a PID 1 in your case.
same here.