fork与exec,父子进程同步的问题

if (fork() == 0)
{
execlp("tar", "tar", "-zcf", "test.tar.gz", "test.txt", NULL);
}
//...父进程做其他事
//wait(NULL);
//删除test.txt文件

问题来了:
1、如何判断test.txt压缩已经完成,在实际测试时,即使加上wait(NULL),父进程也会删掉test.txt文件,导致test.tar.gz压缩的对象不存在,最终是空内容压缩包。请教如何解决
2、我将wait(NULL)此处换为sleep,可以用,但是有两个不好的地方:sleep会影响父进程处理业务速率;test.txt大小如果不定时,压缩时间也不定,sleep时间如何确定,另外,被压缩的文件在压缩时候貌似其他进程也可以删队。

使用findwindow来查找压缩时的窗口,如果窗口不存在,再执行其它操作

  1. wait等待后,再加点sleep稍微多等一下,看是否能够等到进程退出

fork返回值判断错了吧,fork返回0表示是父进程,大于0为子进程,-1为失败,你这里把父进程和子进程的处理代码搞反了,这个wait显然没有用,正确代码应该这么写:

if (fork() != 0)
{
execlp("tar", "tar", "-zcf", "test.tar.gz", "test.txt", NULL);
}
//...父进程做其他事
wait(NULL);
//删除test.txt文件

LInux上实验并未出现异常,加上wait应该能解决问题的,再试试。