UNIX系统调用以注册后台进程

UNIX系统调用以注册后台进程,unix,Unix,我正在写我自己的shell作为课程作业的一部分。所以我需要支持背景工作。我正在维护作业id和后台作业的数据结构。但是我还需要告诉内核这是一个后台进程,所以只有一个终端前台进程。到目前为止,我在我的程序级别处理后台工作 注册后台进程的函数调用是什么?在Linux上查看守护进程函数: int daemon(int nochdir, int noclose); 如果您使用的系统上不存在守护程序函数,则需要使用setsid和fork。在Linux上查看守护程序函数: int daemon(int

我正在写我自己的shell作为课程作业的一部分。所以我需要支持背景工作。我正在维护作业id和后台作业的数据结构。但是我还需要告诉内核这是一个后台进程,所以只有一个终端前台进程。到目前为止,我在我的程序级别处理后台工作


注册后台进程的函数调用是什么?

在Linux上查看守护进程函数:

 int daemon(int nochdir, int noclose);

如果您使用的系统上不存在守护程序函数,则需要使用setsid和fork。

在Linux上查看守护程序函数:

 int daemon(int nochdir, int noclose);

如果您使用的系统上不存在守护程序函数,则需要使用setsid和fork。

抱歉,误读了您的问题。您需要使用
tcsetpgrp
功能

有关详细信息,请阅读GNU C库手册中的本节:


对不起,误读了你的问题。您需要使用
tcsetpgrp
功能

有关详细信息,请阅读GNU C库手册中的本节:

如果希望某个进程不属于终端的控制组,最简单的方法就是给它一个不同的组

switch (fork()) {
    case 0:
        setpgid(getpid(), getpid());
        execvp(...);
如果希望某个进程不属于终端的控制组,最简单的方法就是给它一个不同的组

switch (fork()) {
    case 0:
        setpgid(getpid(), getpid());
        execvp(...);

前几天我在读这一页:我喜欢它的教学方式,比如@Jonathan,那完全不同。这家伙想做作业控制,而另一个问题想启动守护进程。守护进程与终端断开连接,并且根本不与用户交互。@litb:我想不会。aditya的措辞很尴尬,但简单化的工作控制似乎确实是我们想要的,而不是daemonization。前几天我在读这一页:我喜欢它的教学方式@Jonathan的重复,这完全不同。这家伙想做作业控制,而另一个问题想启动守护进程。守护进程与终端断开连接,并且根本不与用户交互。@litb:我想不会。aditya的措辞很尴尬,但简单的作业控制似乎确实是我们想要的,而不是守护进程。我不想要守护进程,但我只想在后台运行一个进程。所以我需要一种通知内核的方法。我不想要一个守护进程,但我只想在后台运行一个进程。所以我需要一种通知内核的方法。