使用 mkfifo 命令我们可以创建我们的管道文件。之后,我只是使用 vim 编辑器打开了该文件。
mkfifo pipe_file
vim pipe_file
Run Code Online (Sandbox Code Playgroud)
但是我不能回到我的终端,我怎样才能回到终端?
当我执行此函数时,我为setpgid()计算了函数,结果将被拒绝.然后我以root用户身份登录该时间,这将打印错误消息,因为权限被拒绝.然后哪个用户可以使用此功能.有谁可以向我解释一下?
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
main()
{
printf("parent pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
pid_t pid,pgid;
pgid=getpgid(getpid());
if((pid=fork())==0)
{
printf("befor sessionchild pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
sleep(5);
pid_t p;
printf("child pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
if((p=fork())==0){
sleep(2);
setsid();
printf("child2 pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
setpgid(getpid(),pgid);
perror("Error");
printf("after setting group id child2 pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
}
wait(0);
exit(0);
}
exit(0);
}
Run Code Online (Sandbox Code Playgroud) 我尝试使用 waitpid() 函数,它需要三个参数,当我实现下面的代码时,我遇到了一些错误,我使用带有三个参数的 wait() 函数,而不是 waitpid() 函数。它工作正常,我不知道它是如何工作的。有谁能解释一下吗??
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
main()
{
pid_t pid;
int p;
if((pid=fork())==0){
printf("Child present\n");
sleep(2);
printf("Child terminated\n");
_exit(0);
}
wait(pid,&p,0);
printf("parent terminated\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但等待函数的语法是
pid_t wait(int *status);
Run Code Online (Sandbox Code Playgroud) 考虑我使用 msgget() 函数创建了 100 个消息队列。
------ Message Queues --------
key msqid owner perms used-bytes messages
0x00000000 262144 bhuvaneshw 666 40 2
0x00000000 294913 bhuvaneshw 666 40 2
0x00000000 327682 bhuvaneshw 666 40 2
0x00000000 360451 bhuvaneshw 666 40 2
0x00000000 393220 bhuvaneshw 666 40 2
0x00000000 425989 bhuvaneshw 666 55 3
....
.....
....
Run Code Online (Sandbox Code Playgroud)
使用一个ipcrm命令,我们可以一次删除单个队列。
ipcrm -q queue_id
Run Code Online (Sandbox Code Playgroud)
或者使用 amsgctl()我们可以删除它。但我想一次性删除所有消息队列。有没有办法在linux中做到这一点?