C在没有看到输入或输出的情况下启动进程



我想写一个init系统,我想生成一个没有IO的进程。意思是,我不想看到输出或者让它接受输入。我目前使用的功能从suckless的sinit -

void spawn(char *const argv[]) {
switch (fork()) {
case 0:
sigprocmask(SIG_UNBLOCK, &set, NULL);
setsid();
execvp(argv[0], argv);
perror("execvp");
_exit(1);
break;
case -1:
perror("fork");
break;
default:
break;
}
}

但是如果我启动一个进程(使用top作为测试),它不会"在后台"运行。我怎么能做到呢?

所有进程都希望从父进程继承文件描述符0、1和2,分别作为标准输入、输出和错误。

传统的方法是将它们重定向到/dev/null。所有输出都消失,任何从标准输入中读取的尝试都会立即显示文件结束指示。

将它们重定向到/dev/null,包括关闭它们,并在它们的位置打开/dev/null

void spawn(char *const argv[]) {
switch (fork()) {
case 0:
sigprocmask(SIG_UNBLOCK, &set, NULL);
setsid();
close(0);
close(1);
close(2);
open("/dev/null", O_RDONLY);
open("/dev/null", O_WRONLY);
open("/dev/null", O_wRONLY);
execvp(argv[0], argv);

鲁棒性表明仔细检查每个open()是否成功。但是,如果打开/dev/null失败,您将有更多的问题需要担心。

相关内容

  • 没有找到相关文章

最新更新