对于想了解在Windows中处理子进程崩溃的读者,本文将提供新的信息,我们将详细介绍处理子程序失败了,所有的子程序是无效的,并且为您提供关于linux模拟多线程崩溃和多进程崩溃、python在wind
对于想了解在Windows中处理子进程崩溃的读者,本文将提供新的信息,我们将详细介绍处理子程序失败了,所有的子程序是无效的,并且为您提供关于linux模拟多线程崩溃和多进程崩溃、python在windows下创建隐藏窗口子进程的方法、select()可以在Windows中处理的套接字的最大数量是多less?、winapi – 在Windows中等待孙子进程的有价值信息。
本文目录一览:- 在Windows中处理子进程崩溃(处理子程序失败了,所有的子程序是无效的)
- linux模拟多线程崩溃和多进程崩溃
- python在windows下创建隐藏窗口子进程的方法
- select()可以在Windows中处理的套接字的最大数量是多less?
- winapi – 在Windows中等待孙子进程
在Windows中处理子进程崩溃(处理子程序失败了,所有的子程序是无效的)
我正在Windows命令提示符下运行python脚本。它调用下面的函数,该函数使用LAME将MP3文件转换为wave文件。
def convert_mp3_to_wav(input_filename, output_filename): """ converts the incoming mp3 file to wave file """ if not os.path.exists(input_filename): raise AudioProcessingException, "file %s does not exist" % input_filename command = ["lame", "--silent", "--decode", input_filename, output_filename] process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = process.communicate() if process.returncode != 0 or not os.path.exists(output_filename): raise AudioProcessingException, stdout return output_filename
不幸的是,LAME总是在某些MP3上崩溃(并达到其名称)。出现Windows“您的程序已崩溃”对话框,该对话框冻结了我的脚本。关闭窗口对话框后,将引发AudioProcessingException。无需告诉Windows关闭,我只想脚本引发异常,然后转到下一个MP3。
有没有办法解决?最好通过更改脚本而不是在Unix上运行脚本。
我正在使用Windows 7和Python 2.6
答案1
小编典典经过更多的谷歌搜索后,我偶然发现了这个 http://www.activestate.com/blog/2007/11/supressing-
windows-error-report-messagebox-subprocess-and-
ctypes
它需要一些修补,但是下面的方法现在不会出现令人讨厌的Windows消息:)注意subprocess.Popen中的creationflags =subprocess_flags
def convert_mp3_to_wav(input_filename, output_filename): if sys.platform.startswith("win"): # Don''t display the Windows GPF dialog if the invoked program dies. # See comp.os.ms-windows.programmer.win32 # How to suppress crash notification dialog?, Jan 14,2004 - # Raymond Chen''s response [1] import ctypes SEM_NOGPFAULTERRORBOX = 0x0002 # From MSDN ctypes.windll.kernel32.SetErrorMode(SEM_NOGPFAULTERRORBOX); subprocess_flags = 0x8000000 #win32con.CREATE_NO_WINDOW? else: subprocess_flags = 0 """ converts the incoming mp3 file to wave file """ if not os.path.exists(input_filename): raise AudioProcessingException, "file %s does not exist" % input_filename #exec("lame {$tmpname}_o.mp3 -f {$tmpname}.mp3 && lame --decode {$tmpname}.mp3 {$tmpname}.wav"); command = ["lame", "--silent", "--decode", input_filename, output_filename] process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, creationflags=subprocess_flags) (stdout, stderr) = process.communicate() if process.returncode != 0 or not os.path.exists(output_filename): raise AudioProcessingException, stdout return output_filename
linux模拟多线程崩溃和多进程崩溃
结论是:
多线程下如果其中一个线程崩溃了会导致其他线程(整个进程)都崩溃;
多进程下如果其中一个进程崩溃了对其余进程没有影响;
多线程
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>
void *fun1(void *arg)
{
printf("fun1 enter\n");
while(1)
{
printf("%s\n", __FUNCTION__);
usleep(1000 * 1000);
}
printf("fun1 exit\n");
return ((void *)1);
}
void *fun2(void *arg)
{
printf("fun1 enter\n");
usleep(1000 * 3000);
char * ptr = (char *)malloc(sizeof(char));
printf("ptr1: 0x%x\n", ptr);
ptr = NULL;
printf("ptr2: 0x%x\n", ptr);
free(ptr);
memcpy(ptr, "123", 3);
printf("ptr3: 0x%x\n", ptr);
printf("fun2 exit\n");
return ((void *)2);
}
int main(void)
{
pthread_t tid1, tid2;
int err;
err = pthread_create(&tid1, NULL, fun1, NULL);
assert(0 == err);
err = pthread_create(&tid2, NULL, fun2, NULL);
assert(0 == err);
printf("main join ...\n");
// getchar();
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
多进程
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>
void fun(void *arg)
{
printf("fun1 enter\n");
usleep(1000 * 3000);
char * ptr = (char *)malloc(sizeof(char));
printf("ptr1: 0x%x\n", ptr);
ptr = NULL;
printf("ptr2: 0x%x\n", ptr);
free(ptr);
memcpy(ptr, "123", 3);
printf("ptr3: 0x%x\n", ptr);
printf("fun2 exit\n");
return ;
}
int main(int argc, char *argv[])
{
assert(2 == argc);
pid_t pid;
int i;
for(i=0; i<atoi(argv[1]); i++)
{
pid = fork();
if(0 > pid)
{
printf("fork error");
exit(1);
}
else if(0 == pid)
{
printf("child pid is %lu\n", (unsigned long)getpid());
fun(NULL);
exit(0);
}
}
printf("parent pid is %lu\n", (unsigned long)getpid());
while(-1 != wait(NULL)); //等待所有子进程结束
printf("main return\n");
getchar();
return 0;
}
python在windows下创建隐藏窗口子进程的方法
本文实例讲述了python在windows下创建隐藏窗口子进程的方法。分享给大家供大家参考。具体实现方法如下:
import subprocess IS_WIN32 = 'win32' in str(sys.platform).lower() def subprocess_call(*args,**kwargs): #also works for Popen. #It creates a new *hidden* window,#so it will work in frozen apps (.exe). if IS_WIN32: startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags = subprocess.CREATE_NEW_CONSOLE | subprocess.STARTF_USESHOWWINDOW startupinfo.wShowWindow = subprocess.SW_HIDE kwargs['startupinfo'] = startupinfo retcode = subprocess.call(*args,**kwargs) return retcode
希望本文所述对大家的Python程序设计有所帮助。
select()可以在Windows中处理的套接字的最大数量是多less?
select()可以默认处理64个套接字,我可以通过在编译时重写FD_SETSIZE常量来改变这个限制。 但是FD_SETSIZE可以使用的最大数量是多less?
也应该真的使用select()在Windows下,或者我应该使用WSAEventSelect() ? (不知道WSAEventSelect()允许超过64个套接字)。
多端口监听套接字linux
在Windows上的套接字 – 我错过了我的程序中的东西?
为什么套接字连接()到它自己的临时端口?
什么时候closuresCAsyncSocket是安全的?
Python套接字问题:Windows中的socket.MSG_DONTWAIT
MSDN没有具体的FD_SETSIZE的上限。 但是有多少因素影响了实际的限制。
并行连接限制(system-wise),一般工作站上约1000〜4000。
性能。 Windows的select()实现得非常糟糕,您应该考虑使用WSAAsyncSelect()和超过一千个套接字的完成端口。
最大数量的套接字取决于底层的WinSock服务提供者(WinSock本身就是接口封装)。 请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/ms739169(v=vs.85).aspx
WSAEventSelect()在select()上有一些额外的功能,但FD_SETSIZE由两个函数处理相同。
总结
以上是小编为你收集整理的select()可以在Windows中处理的套接字的最大数量是多less?全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
winapi – 在Windows中等待孙子进程
具体来说,这就是我想要做的.我的进程启动uninstallA.exe.进程uninistallA.exe启动uninstallB.exe并立即退出,uninstallB.exe运行一段时间.我想等待uninstallB.exe退出,以便我知道何时卸载完成.
然后是困难部分:等待作业对象完成其执行.不幸的是,这比任何人合理希望的要复杂得多.基本思想是创建一个I / O完成端口,然后创建对象对象,将其与I / O完成端口关联,最后等待I / O完成端口(使用GetQueuedCompletionStatus获取其状态).雷蒙德·陈(Raymond Chen)在他的blog上进行了演示(以及对此的解释).
今天关于在Windows中处理子进程崩溃和处理子程序失败了,所有的子程序是无效的的介绍到此结束,谢谢您的阅读,有关linux模拟多线程崩溃和多进程崩溃、python在windows下创建隐藏窗口子进程的方法、select()可以在Windows中处理的套接字的最大数量是多less?、winapi – 在Windows中等待孙子进程等更多相关知识的信息可以在本站进行查询。
本文标签: