static void cleanupDCOP(int dont_kill_dcop, int wait_for_exit)
{
    FILE *f;
    char dcop_file[2048 + 1];
    char dcop_file_old[2048 + 1];
    char buffer[2048 + 1];
    pid_t pid = 0;

    getDCOPFile(dcop_file, dcop_file_old, 2048);
    if(strlen(dcop_file) == 0)
        return;

    f = fopen(dcop_file, "r");
    unlink(dcop_file); /* Clean up .DCOPserver file */
    unlink(dcop_file_old);
    if(!f)
        return;

    while(!feof(f))
    {
        if(!fgets(buffer, 2048, f))
            break;
        pid = strtol(buffer, NULL, 10);
        if(pid)
            break;
        cleanupDCOPsocket(buffer);
    }
    fclose(f);

    if(!dont_kill_dcop && pid)
        kill(pid, SIGTERM);

    while(wait_for_exit && (kill(pid, 0) == 0))
    {
        struct timeval tv;
        tv.tv_sec = 0;
        tv.tv_usec = 100000;
        select(0, 0, 0, 0, &tv);
    }
}
static void cleanupDCOP(int dont_kill_dcop, int wait_for_exit)
{
	TQCString host;
	TQCString strDCOPServer = DCOPClient::dcopServerFile(host);

	if(strDCOPServer.isEmpty())
	{
			printf("no server file\n");
		return;
	}
	printf("server file %s\n",(const char *)strDCOPServer);

	pid_t	pid = 0;
	TQFile f(strDCOPServer);
	if(f.open(IO_ReadOnly))
	{
		TQString str;
		while(f.readLine(str,2048))
		{
			pid = str.toULong();
			if (pid)
				break;
			cleanupDCOPsocket(str.ascii());
		}
	}
	f.close();
	/* Clean up .DCOPserver file */
	TQFile::remove(strDCOPServer);
	printf("remove server file %s\n",(const char *)strDCOPServer);

	if(pid)
	{
		if(!dont_kill_dcop)
		{
#ifdef Q_OS_WIN
			killDCOPWin(pid);
#else
			kill(pid, SIGTERM);
#endif
		}
		else
		{
#ifdef Q_OS_WIN
			killDCOPWin(pid);
#endif
		}
	}

#ifdef Q_OS_WIN
	if(wait_for_exit)
	{
		HANDLE hProcess = OpenProcess(SYNCHRONIZE,FALSE,(DWORD)pid);
		if(hProcess)
		{
			WaitForSingleObject(hProcess,INFINITE);
			CloseHandle(hProcess);
		}
	}
#else
	while(wait_for_exit && (kill(pid, 0) == 0))
	{
		struct timeval tv;
		tv.tv_sec = 0;
		tv.tv_usec = 100000;
		select(0,0,0,0,&tv);
	}
#endif
}