进程间通信,下的文件被占用问题解决

windows下,经常容易出现文件被其他程序占用的现象,令人十分头疼。更头疼的是,还看不到被谁占用。

[20171225]变态的windows批处理4.txt

1、编写一段程序,使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进  程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:  

实际上是有办法看到占用的进程的。

--//昨天学习windows 批处理的echo &.使用它可以实现类似回车换行的功能.例子:

Child process 1 is killed by parent!

话不多说,以Win10为例:

1.echo &.
R:>echo 1111 & echo 2222
1111
2222

Child process 2 is killed by parent!

1.打开资源监视器

--//但是如果写成如下:

父进程等待两个子进程终止后,输出以下信息后终止:

  a.直接程序栏搜索”资源监视器“即可

R:>echo 1111 & echo 2222 > aa.txt
1111

Parent process is killed!

图片 1

R:>cat aa.txt
2222

 1 #include<stdio.h>
 2 #include<signal.h>
 3 #include<unistd.h>
 4 #include<sys/types.h>
 5 #include<sys/wait.h>
 6 int wait_mark;
 7 void waiting(),stop();
 8 void main()
 9 {int  p1, p2;
10 signal(SIGINT,stop);
11 while((p1=fork())==-1);
12 if(p1>0)                            /*在父进程中*/
13 {①
14 while((p2=fork())==-1);
15            If(p2>0)                    /*在父进程中*/
16             { ②
17                   wait_mark=1;
18                  waiting(0);
19                 kill(p1,10);
20                 kill(p2,12);
21                 wait( );
22                wait( );
23                printf("parent process is killed!n");
24                exit(0);
25             }
26            else                        /*在子进程2中*/
27            {
28 wait_mark=1;
29 signal(12,stop);
30 waiting();
31 lockf(1,1,0);
32 printf("child process 2 is killed by parent!n");
33 lockf(1,0,0);
34 exit(0);
35 }
36 } 
37 else                        /*在子进程1中*/
38 {
39       wait_mark=1;
40       signal(10,stop);
41       waiting();
42       lockf(1,1,0);
43       printf("child process 1 is killed by parent!n");
44       lockf(1,0,0);
45       exit(0);
46 }
47 }
48 void waiting()
49 {
50    while(wait_mark!=0);
51 }
52 void stop()
53 {
54    wait_mark=0;
55 }

  b.打开任务管理器(Ctrl+shift+ESC),进入性能栏,最下方即资源监视器入口

--//你可以发现1111,显示输出,而2222写入文件aa.txt,改写成管道看看.

 

图片 2

R:>echo 1111 &echo 2222 | cat
1111
2222

⑴运行程序并分析结果。

 

--//OK.实际上这个是假象,第1行走屏幕,第2行走管道,看下面的测试就明白了.如果要写到文件实际上要加括号,这个跟linux有一个相似.
R:>(echo 1111 &echo 2222 ) > aa.txt

^C

 2.资源监视器中在CPU栏有个关联的句柄自选项,选项栏右侧有个搜索栏,在其中输入被占用的文件的名称即可

R:>cat aa.txt
1111
2222

child process 2 is killed by parent!

图片 3

--//这个倒是正常的情况.

child process 1 is killed by parent!

如图,在句柄名称列找到被占用的文件(包括路径),对应行即占用进程信息,可以右键结束进程

2.利用这个特性可以通过管道传输命令给sqlplus.

parent process is killed!

本文由澳门新葡亰平台官网发布于操作系统,转载请注明出处:进程间通信,下的文件被占用问题解决

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。