我正在尝试在C中创建一个简单的shell程序.我需要它做的是为用户提供一个可以运行其他本地程序的提示.我可以使用fork()来完成该部分,其中父进程在子进程上等待(),而子进程execvp()是程序.
但是,如果'&'字符附加到用户命令的末尾,我需要他们的程序在后台运行,这意味着我需要父进程不等待子进程,而是立即将提示返回给用户,同时允许后台进程继续运行,但不允许它在屏幕上显示任何内容.我只是想通过ps命令检查它是否仍然存在.
我试图理解使用fork()创建子项的想法,然后让子fork()再次创建一个类的孙子,然后立即退出() - 子进程.即,孤儿孙子.据说这允许父母仍然等待孩子,但由于孩子几乎立即有效地结束,它就像它不等待?关于僵尸疯狂的事情?我不知道.我遇到过的几个网站似乎都建议将其作为在后台运行流程的一种方式.
但是,当我尝试这样做的时候,我发现程序流程发生了很多事情,"背景"过程继续在屏幕上显示输入,我真的不知道从哪里开始.
这是我对代码的实现,我确信这是非常错误的.我只是想知道这整个孙子的事情是否是我需要采取的路线,如果是这样,我的代码有什么问题?
36 int main(int argc, char *argv[])
37 {
38 char buffer[512];
39 char *args[16];
40 int background;
41 int *status;
42 size_t arg_ct;
43 pid_t pid;
44
45 while(1)
46 {
47 printf("> ");
48 fgets(buffer, 512, stdin);
49 parse_args(buffer, args, 16, &arg_ct);
50
51 if (arg_ct == 0) continue;
52
53 if (!strcmp(args[0], "exit"))
54 {
55 exit(0);
56 }
57
58 pid = fork(); //here I fork and create a child …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为301s创建一个正则表达式,这将帮助我识别网址:site.com/abc/
并重定向到site.com/xyz/
.我已经尝试了正则表达式^abc/?
,它工作正常,但问题是甚至网址site.com/123/sdas/abc/213
都被抓住了.我怎样才能确保只/abc
匹配完整的字符串网址?