我现在在编写一个在LINUX下运行的命令解释器,对于后台运行的命令方法有些不懂,请高手指点一下

horace331 2003-08-30 10:13:08
我的任务是编一个在LINUX下运行的命令解释器,模拟LINUX中的SHELL

现在的困难是要求可以用&作为命令的结束符使之后台运做,请高手指点一下思路

当然,直接编好更好:)
...全文
37 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
horace331 2003-08-31
  • 打赏
  • 举报
回复
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CoolQ 2003-08-31
  • 打赏
  • 举报
回复
#define MAX_CMD_SIZE 1024

static void sig_chld_handler(int signo)
{
int status;
int pid;
while((pid=wait(&status)) > 0){
printf("Child done, pid = %d, exit status = %d", pid, status);
};
return;
}
int main(int argc, char *argv[])
{

char cmdbuf[MAX_CMD_SIZE];
if(signal(SIGCHLD, sig_chld_handler) == SIG_ERR){
printf("signal handler error\n");
exit(EXIT_FAILURE);
}
while(1){
fputs(">");
fgets(cmdbuf, sizeof(cmdbuf), stdin);
if((pid = fork) < 0){
printf("fork Error.\n");
exit(EXIT_FAILURE);
}else if(pid == 0)
execlp(cmdbuf, cmdbuf, 0);
}
}
这个程序我没有调试,但是大体意思应该错不了,而且命令是在后台进行的,但是这个程序有几个地方我简化了,一个是判定是不是需要后台运行,需要查找&字符,要确定&是在最后而不是在中间,如果是在前台运行的话,main里边就要wait,另一个是这个程序父进程被意外退出时不能保证后台子进程全部退出,你自己完善一下吧
ice_soft 2003-08-31
  • 打赏
  • 举报
回复
很容易,创建一个新的进程:
先用fork()
然后用execv()就可以了。
klbt 2003-08-30
  • 打赏
  • 举报
回复
学习。

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧