社区
进程/线程/DLL
帖子详情
如何杀死,并重新启动一个进程
huanmeng2008
2010-03-11 11:40:56
我现在有一个基于对话框的程序a.exe,里面有个注销的功能,我想点击注销的时候 杀死自身,然后在重新启动这个程序。请问大虾们该如何实现,调用哪些API。
...全文
712
34
打赏
收藏
如何杀死,并重新启动一个进程
我现在有一个基于对话框的程序a.exe,里面有个注销的功能,我想点击注销的时候 杀死自身,然后在重新启动这个程序。请问大虾们该如何实现,调用哪些API。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
34 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
自由建客
2010-03-13
打赏
举报
回复
Windows就是麻烦
hzy694358
2010-03-11
打赏
举报
回复
就是所谓的守护进程
sjdev
2010-03-11
打赏
举报
回复
关闭时启动一批处理,在批处理中启动程序.
如果时间太紧,批处理中可以设置延时.
这不是鸭头
2010-03-11
打赏
举报
回复
很多都是借助另外的一个程序来实现
bilaopao
2010-03-11
打赏
举报
回复
在a.exe启动之后启动另一个进程monitor.exe来辅助实现此功能。
当a.exe退出时发送参数到monitor.exe告知“我已经退出了,你再启动我吧”
monitor.exe接受到命令后用findwindow来看之前的a.exe是否已经消失了。
然后再启动a.exe .
只是给个思路,里面还有一些地方要注意,但是肯定行得通。
cpp2017
2010-03-11
打赏
举报
回复
如果不借助另一个程序的话,必须先启动,再退出自己。
那么在一个短时间内,该程序会运行两个实例。如果运行两个程序有问题的话,得借助另一个程序来做。
ljz888666555
2010-03-11
打赏
举报
回复
你可以先启动,再杀死。
CreateProcess
TerminateProcess
WizardK
2010-03-11
打赏
举报
回复
[Quote=引用 29 楼 huanmeng2008 的回复:]
引用 27 楼 wizardk 的回复:
引用 26 楼 huanmeng2008 的回复:
to WizardK:
多开 就向你用5个QQ号同时开5个QQ ,这个时候你只是要注销其中的一个号码为88888的QQ, 其他正常运行。
我晕了。。。你5个进程,要关闭一个,然后呢?这个和你所说的关闭并开启一个进程有什么关系?
关闭一个后自动在重启一个啊!!!!!
[/Quote]
那你就CREATEPROCESS后退出
mszjk
2010-03-11
打赏
举报
回复
进程是用PID唯一标识的吧?
多开不多开没什么关系吧?
有没有好办法啊~~~
huanmeng2008
2010-03-11
打赏
举报
回复
写了个测试例子 貌似可以用,不知道会不会有其他什么问题,大家帮忙看看。
在BOOL CtestApp::InitInstance()里添加
CString strParam = GetCommandLine();
AfxMessageBox(strParam);
int idx = strParam.ReverseFind('\"');
if ( idx > 0)
{
CString strID = strParam.Mid(idx+2);
if ( !strID.IsEmpty() )
{
AfxMessageBox(strID);
DWORD dwProcessID = atoi((LPCSTR)strID);
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
TerminateProcess(handle,0);
}
}
Button1为注销按钮:
void CtestDlg::OnBnClickedButton1()
{
DWORD dwProcessID=0;
GetWindowThreadProcessId(m_hWnd, &dwProcessID);
char buf[MAX_PATH+1];
memset(buf, 0, sizeof(buf));
::GetModuleFileName(NULL, buf, MAX_PATH);
/// 把进程ID 当成参数传给下个进程,由启动的进程关闭这个进程
CString path;
path.Format("%s %d",buf, dwProcessID);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if( !CreateProcess( NULL, (LPSTR)(LPCSTR)path,NULL,NULL, FALSE, 0, NULL, NULL, &si, &pi ) )
{
return;
}
}
a5796489
2010-03-11
打赏
举报
回复
楼主在14楼的要求的看法:
你要新建一个进程然后通过原进程的PID去关闭原进程何必要通过原进程向新进程传递pid呢,直接在新进程里用FindWindow或其它函数来获取不就行了么?如果一定要通过原进程传给新进程的话,可以考虑用全局原子来实现
huanmeng2008
2010-03-11
打赏
举报
回复
[Quote=引用 27 楼 wizardk 的回复:]
引用 26 楼 huanmeng2008 的回复:
to WizardK:
多开 就向你用5个QQ号同时开5个QQ ,这个时候你只是要注销其中的一个号码为88888的QQ, 其他正常运行。
我晕了。。。你5个进程,要关闭一个,然后呢?这个和你所说的关闭并开启一个进程有什么关系?
[/Quote]
关闭一个后自动在重启一个啊!!!!!
zklovehh
2010-03-11
打赏
举报
回复
学习了......................
WizardK
2010-03-11
打赏
举报
回复
[Quote=引用 26 楼 huanmeng2008 的回复:]
to WizardK:
多开 就向你用5个QQ号同时开5个QQ ,这个时候你只是要注销其中的一个号码为88888的QQ, 其他正常运行。
[/Quote]
我晕了。。。你5个进程,要关闭一个,然后呢?这个和你所说的关闭并开启一个进程有什么关系?
huanmeng2008
2010-03-11
打赏
举报
回复
to WizardK:
多开 就向你用5个QQ号同时开5个QQ ,这个时候你只是要注销其中的一个号码为88888的QQ, 其他正常运行。
huanmeng2008
2010-03-11
打赏
举报
回复
[Quote=引用 22 楼 cpp2017 的回复:]
这个会不会导致一种情况,退出比较慢的话 退出界面还没销毁掉,另启动的那个进程界面已经弹出来。
=====>
会有这个情况,如果只是担心两个界面并存的话,可以先隐藏这个注销的窗口,然后开新进程,旧进程退出。
[/Quote]
因为我的主对话框上一些按钮还可以弹出一些子对话框, 这样我不是要一个个判断这些子对话框,然后在一个个隐藏。这样太麻烦了。
WizardK
2010-03-11
打赏
举报
回复
[Quote=引用 21 楼 huanmeng2008 的回复:]
引用 19 楼 cpp2017 的回复:
我是想只关掉注销的那一个
==》
那就按正常的来,先启动一个进程,再自己正常退出。一点问题都没有。
这个会不会导致一种情况,退出比较慢的话 退出界面还没销毁掉,另启动的那个进程界面已经弹出来。
to WizardK:
有需求啊, 我这程序支持多开啊
[/Quote]
啥叫多开啊?你如果“同时”开启多个进程,需要最后一个开启的进程把前面的都关闭?
我先问下,你怎么同时开启的?是否可以用单位时间内不允许同名进程开启来解决?
zhou1xp
2010-03-11
打赏
举报
回复
关闭的时候开新进程来启动
cpp2017
2010-03-11
打赏
举报
回复
这个会不会导致一种情况,退出比较慢的话 退出界面还没销毁掉,另启动的那个进程界面已经弹出来。
=====>
会有这个情况,如果只是担心两个界面并存的话,可以先隐藏这个注销的窗口,然后开新进程,旧进程退出。
huanmeng2008
2010-03-11
打赏
举报
回复
[Quote=引用 19 楼 cpp2017 的回复:]
我是想只关掉注销的那一个
==》
那就按正常的来,先启动一个进程,再自己正常退出。一点问题都没有。
[/Quote]
这个会不会导致一种情况,退出比较慢的话 退出界面还没销毁掉,另启动的那个进程界面已经弹出来。
to WizardK:
有需求啊, 我这程序支持多开啊
加载更多回复(14)
android双
进程
守护,
进程
很难被
杀死
demo
android双
进程
守护,
进程
很难被
杀死
杀死
进程
并重启 c语言,C++ 实现 查找
进程
,
杀死
进程
, 启动
进程
,
进程
重启(示例代码)...
头文件:#include #include #include #include 查找
进程
: 就是调用windowApi遍历所有启动
进程
, 实现如下bool FindProcess(std::string strProcessName, DWORD& nPid){TCHAR tszProcess[64] = { 0 };lstrcpy(tszProcess, _T(strProcessNa...
杀掉
一个
应用
进程
,
重新启动
Windows杀掉
进程
和启动
进程
bat脚本;如果需要按计划执行,可以将脚本放到Windows任务计划中去按计划执行。
Linux下kill -9杀不死
进程
或
杀死
又自动启动,解决
问题描述 在ubuntu下 kill -9
杀死
进程
时候发现杀不死,或者是
杀死
了立刻又重启。 原因是该
进程
的父
进程
还在,所以会
杀死
进程
后又自动启动了,看起来是我们没kill掉一样。 解决方法 ps -aux #查看所有
进程
,找到需要kill的PID号。 假设该
进程
的PID号是18478 cd /proc/18478 #cd /proc/PID号 cat status #查看该PID号对应的父
进程
,即找到PPID这个
进程
号,假设是1000 kill -9 1000 #先
杀死
父
进程
kill
shell脚本查询
进程
并
杀死
shell脚本查询
进程
并
杀死
说明: 工作中经常需要写
一个
定时脚本,需要找到
一个
进程
,然后
杀死
,并定时
重新启动
这个
进程
。 具体脚本如下:(ngsp代表是什么
进程
) #!/bin/bash ID=`ps -ef | grep ngsp | grep -v grep | awk '{print $2}'` echo $ID for id in $ID do kill -9 $id echo "kill $id" done 或者有些朋友看了,不明白,我这里就举
一个
httpd的例子吧 1. 安装
一个
apa
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章