gpt4 book ai didi

c - 迷你 shell 背景

转载 作者:行者123 更新时间:2023-11-30 16:47:47 28 4
gpt4 key购买 nike

我正在为大学做一个minishell项目,我不知道如何在后台执行命令。我知道的一件事是我必须使用 waitpid() 和 sigaction(),但我不知道如何使用。如果有人愿意帮我解决这个问题,我将不胜感激。这是我使用的代码部分,用于使用 minishell 命令。

void execute_command_line(command* cmds, int n){
pid_t id,pid;
int status;
id=fork();
if(id==-1){
exit(EXIT_FAILURE);
}
else if(if==0){
execvp(cmds[0] . argv[0],&cmds[0] .argv[0]);
exit(0);
}
else{
pid=wait(&status);
if(pid==-1){
perror("Father: an error has ocurred.\n");
exit(EXIT_FAILURE);
}
else if(pid==id){
printf("Father: the son has ended.\n");
}
}

}

最佳答案

后台进程的一个关键特征是您无法与它交互(但它仍然可以打印到您的终端)。这至少意味着键盘生成的信号不得传递给该进程。这可以通过调用setsid()创建一个新 session 来完成,也可以通过简单地禁用子进程中的键盘信号来模拟(有你的sigaction)。

使用 waitpid 意味着你的父进程可能不会立即退出,而是会等待(使用 waitpid)后台子进程完成。

所以...用 waitpid() 替换等待并用 sigaction() 禁用键盘中断(SIGINT 和 SIGQUIT),然后您将在后台执行。

关于c - 迷你 shell 背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43214995/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com