精华内容
下载资源
问答
  • VC++结束程序进程

    千次阅读 2012-10-16 14:18:10
    1.使用ExitProcess()结束进程  进程只是提供了一段地址空间和内核对象,其运行时通过...除了这种进程的正常退出方式外,有时还需要在程序中通过代码来强制结束进程或其他进程的运行。ExitProcess()函数的原型为:

    1.使用ExitProcess()结束进程

       进程只是提供了一段地址空间和内核对象,其运行时通过在其地址空间内的主线程来体现的。当主线程的进入点函数返回时,进程也就随之结束。这种进程的终止方式是进程的正常退出,进程中的所有线程资源都能够得到正确的清除。除了这种进程的正常退出方式外,有时还需要在程序中通过代码来强制结束本进程或其他进程的运行。ExitProcess()函数的原型为:

     void ExitProcess(UINT uExitCode);

       其参数uExitCode为进程设置了退出代码。该函数具有强制性,在执行完毕后进程即被结束,因此位于其后的任何代码将不能被执行。虽然ExitProcess()函数可以在结束进程的同时通知与其关联的动态链接库,但是由于它的这种执行的强制性,使得ExitProcess()函数在使用上将存在有安全隐患。例如,如果在程序调用ExitProcess()函数之前曾用new操作符申请过一段空间,那么将会由于ExitProcess()函数的强制性而无法通过delete操作符将其释放,从而造成内存泄露。有鉴于ExitProcess()函数的强制性和不安全性,在使用时一定要引起注意。

    2.使用TerminateProcess()结束进程

       ExitProcess()只能强制执行本进程的退出,如果要在一个进程中强制结束其他进程就要用TerminateProcess()来实现。与ExitProcess()不同,TerminateProcess()函数执行后,被终止的进程是不会的到任何关于程序退出的通知的。也就是说,被终止的进程是无法在结束运行前进行退出前的收尾工作的。所以,通常只有在其他任何方法都无法迫使进程退出时才会考虑使用TerminateProcess()去强制结束进程。下面给出TerminateProcess()的函数原型:

     BOOL TerminateProcess(HANDLE hProcess,UINT uExitCode);

       参数hProcess和uExitCode分别为进程句柄和退出代码。如果被结束的是本进程,可以通过GetCurrentProcess()获取到句柄。TerminateProcess()是异步执行的,在调用返回后并不能确定被终止进程是否已经真的退出,如果调用TerminateProcess()的进程对此细节关心,可以通过WaitForSingleObject()来等待进程的真正结束。

     

     

       在VC程序中如何结束系统正在运行的其他进程(该进程必须有窗口界面),其实很简单,按如下步骤进行即可:
        1.取得进程的句柄(利用FindWindow函数得到);
        2.获取进程ID号(用GetWindowThreadProcessId函数获取);
        3.打开进程,OpenProcess函数中的第一个参数设为PROCESS_TERMINATE,就可以获取处理该进程的句柄;
        4.利用TerminateProcess函数结束进程,将该函数的第二个参数设为4。

        代码如下: 

    // 结束进程
    int  CStaticFunc::KillProcess(LPCSTR pszClassName, LPCSTR 

    pszWindowTitle)
    {
        HANDLE hProcessHandle;  
        ULONG nProcessID;
        HWND TheWindow;

        TheWindow 
    = ::FindWindow( NULL, pszWindowTitle );
        ::GetWindowThreadProcessId( TheWindow, 
    &nProcessID );
        hProcessHandle 
    = ::OpenProcess( PROCESS_TERMINATE, FALSE, nProcessID );
        
    return ::TerminateProcess( hProcessHandle, 4 );
    }



    而启动进程则只需要CreateProcess函数就可完成
    // 启动新进程
    int  CStaticFunc::CreateNewProcess(LPCSTR pszExeName)
    {
        PROCESS_INFORMATION piProcInfoGPS;
        STARTUPINFO siStartupInfo;
        SECURITY_ATTRIBUTES saProcess, saThread;
        ZeroMemory( 
    &siStartupInfo, sizeof(siStartupInfo) );
        siStartupInfo.cb 
    = sizeof(siStartupInfo);
        saProcess.nLength 
    = sizeof(saProcess);
        saProcess.lpSecurityDescriptor 
    = NULL;
        saProcess.bInheritHandle 
    = true;
        saThread.nLength 
    = sizeof(saThread);
        saThread.lpSecurityDescriptor 
    = NULL;
        saThread.bInheritHandle 
    = true;
        
    return ::CreateProcess( NULL, (LPTSTR)pszExeName, &saProcess, &saThread, false, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &siStartupInfo,&piProcInfoGPS );
    }
    展开全文
  • Labview2014编程实现结束电脑中任意进程
  • 结束进程后,系统托盘图标往往不能自动刷新,此程序模拟鼠标点击托盘图标刷新托盘;
  • 可以指定结束任务管理器中的进程,本人试验过觉得能用
  • for (int iRow = 0; iRow ; iRow++) { Cmd.CommandText = "kill " + spidTable.Rows[iRow][0].ToString();... 用这个方法结束连接数据库的进程,但是总是提示我不能结束自己的进程,如何解决?
  • 已经写好的dll,直接调用里面的2个函数就可以了
  • C#程序中:如何启用进程结束进程、查找进程 在启动某个程序之前,如果需要先检查改程序是否已经运行,可以查找进程里有没有这个进程,再根据查找进程后的结果进行相应的判断操作。  产找进程的范围是...

    C#程序中:如何启用进程、结束进程、查找进程

    在启动某个程序之前,如果需要先检查改程序是否已经运行,可以查找进程里有没有这个进程,再根据查找进程后的结果进行相应的判断操作。

        产找进程的范围是任务管理器中的进程列表。如果进程被隐藏了,结果……(我没有试过)

     

     

    查找进程、启用进程、关闭进程

    using ……
    using ……
    using System.Diagnostics;

     

    //启用进程
    void process()
    {
     Process p;//实例化一个Process对象
     p=Process.Start(@"E:\1.txt");//要开启的进程(或 要启用的程序),括号内为绝对路径
     p.Kill();//结束进程
    }

     

    //查找进程、结束进程
    void killProcess()
    {
         Process[] pro = Process.GetProcesses();//获取已开启的所有进程

                //遍历所有查找到的进程

                for (int i = 0; i < pro.Length; i++)
                {

                    //判断此进程是否是要查找的进程
                    if (pro[i].ProcessName.ToString().ToLower() == "pc_task")
                    {
                        pro[i].Kill();//结束进程
                    }
                }
    }

    展开全文
  • 因为当有主进程启动了子进程后,所有的进程实际上是被放在程序域中运行的(winform的Program文件中的Application域中),而结束的仅仅是域中的某个进程。当然,如果我们正常推出主进程,实际上Application在推出时,...
  • 输入指定进程名-〉结束进程-〉结果输出:进程结束 输入指定窗口名-〉关闭窗口-〉结果输出:窗口关闭
  • 类似于360,腾讯管家等在任务管理器中无法结束提示拒绝访问 ...可以用程序调用并且传入要保护的进程名即可,保护完成后程序自动退出(但是无法取消保护,不过程序自己可以正常退出) 压缩包里有GIF教程图片
  • 一个自己用VB6.0写的批量结束进程的工具,用批处理结束进程时候会有一个窗口出现,并且在结束进程的时候会大量占用CPU资源,此程序解决掉了这个问题,并且速度更快, 用带参数运行的方式,可以批量结束掉在黑名单中...
  • 用java写一个程序, 希望运行在windows系统的后台, 这个程序不允许同时运行多个, 程序启动的时候, 需要检查当前是否有该程序进程在运行, 如果有则杀死该进程. 实现原理 获取当前进程ID RuntimeMXBean ...

    问题描述

    用java写一个程序, 希望运行在windows系统的后台, 这个程序不允许同时运行多个, 程序启动的时候, 需要检查当前是否有该程序的进程在运行, 如果有则杀死该进程.

    实现原理

    • 获取当前进程ID
        RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
        //获取当前进程ID
        String currentProcessID = runtimeMXBean.getName().split("@")[0];
    • 获取所有jvm进程
        //获取所有的进程采用了jps命令, 该命令位于jdk的bin目录jps.exe, 同时需要lib下的tools.jar提供支持, 可将jps.exe和tools拷贝到jre中对应的bin和lib下, 采用jps实现获取所有jvm进程
        Process p = Runtime.getRuntime().exec("jre1.8.32/bin/jps -l");
        InputStream in = p.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String temp;
        while (( temp = reader.readLine()) != null) {
            System.out.println("获取到进程:" + temp);
        }
    • 杀死进程
    Runtime.getRuntime().exec("taskkill /f /pid " + pid);

    代码如下

    private static void removeOldProcess() {
            // 获取监控主机
            try {
                //获取当前进程ID
                RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
                String currentProcessID = runtimeMXBean.getName().split("@")[0];//当前进程ID
                //jps命令获取所有的jvm进程, jps命令位于jdk下bin目录的jps.exe, jps命令需要jdk下lib目录中tools.jar的支持
                Process p = Runtime.getRuntime().exec("jre1.8.32/bin/jps -l");
                InputStream in = p.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                String temp;
                while (( temp = reader.readLine()) != null) {
                    if (!temp.contains("com.friendcom.ic.App") && !temp.contains("ic.jar")){
                        continue;
                    }
                    String pid = temp.substring(0, temp.indexOf(" "));
                    if (currentProcessID.equalsIgnoreCase(pid)){
                        System.out.println("当前服务进程:" + temp);
                        continue;
                    }
                    System.out.println("杀死旧服务进程:" + temp);
                    Runtime.getRuntime().exec("taskkill /f /pid " + pid);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    展开全文
  • 命令行程序 现在只有一个参数,-p 进程名,当指定的进程结束时会记录到当前目录的日志文件中
  • 上一篇博客写到了重启程序,那么结束程序怎么写脚本呢? 还是用前面的例子:我有个程序是qt生成的可执行文件,名字为Manipulator,路径是/home/mk90/Documents/qt_exercise/build-Manipulator-Desktop-Debug,它...

    Shell脚本监控程序运行情况(结束进程)

    上一篇博客写到了重启程序,那么结束程序该怎么写脚本呢?
    还是用前面的例子:我有个程序是qt生成的可执行文件,名字为Manipulator,路径是/home/mk90/Documents/qt_exercise/build-Manipulator-Desktop-Debug,它的监控脚本如下:
    kill.sh

    #! /bin/bash
    
    while true 
    do
    	monitoring=` ps -ef|grep Manipulator |grep -v grep| wc -l`
    	if [ $monitoring -eq 0 ] 
    	then
    		echo "Manipulator is not running "
    	else
    		echo "Manipulator is running, and kill it"
    		ps -ef| grep Manipulator| grep -v grep| awk '{print $2}'| xargs kill -9 #xargs 将前面的结果作为参数给 kill-9
    	fi
    	sleep 3
    done
    

    其中指令的含义在上一篇
    https://mp.csdn.net/mdeditor/94588412#
    里面详细解释过了,不再重复,要重点说明的是这一行:

    ps -ef| grep Manipulator| grep -v grep| awk '{print $2}'| xargs kill -9 #xargs 将前面的结果作为参数给 kill-9
    

    从前面一直到 awk ‘{print $2}’ 的含义是:以详细格式查看所有进程,从中选出具有关键字 Manipulator 的进程,但是排除掉用于查找的grep自身进程,对于满足上面条件的结果,打印其第二列(进程的pid号)。

    xargs kill -9 : 这几个代码的意思是把前面指令运行的结果当做参数传递给后面的指令,在这里,前面的指令运行的结果是找到了进程的pid号,到了这里就相当于kill -9 [pidof target], 也就是根据进程的pid 号来结束进程。xargs 命令是个很有意思的命令,有兴趣的话可以参考下面的文章:
    https://www.cnblogs.com/wangqiguo/p/6464234.html

    这样,整个脚本就可以没3秒钟查看一下有没有目标进程,如果有的话就结束它。

    还有另外一个方法:

    #! /bin/bash
    
    while true 
    do
    	monitoring=` ps -ef|grep Manipulator |grep -v grep| wc -l`
    	target=` ps -ef|grep Manipulator |grep -v grep|awk '{print $2}'`
    	if [ $monitoring -eq 0 ] 
    	then
    		echo "Manipulator is not running "
    	else
    		echo "Manipulator is not running, and kill it"
    		kill -9 $target
    	fi
    	sleep 3
    done
    

    这种方法与前面的不同在于,这里是先查找到进程的pid号,赋值给一个变量target,在下面将target的值传递给 kill -9 指令。当然从本质上来说这两种是一样的。

    到了这里,我们可以结合前面重启程序的方法,做一个无聊的小游戏~~~
    有两个程序,test.py 和 test2.py ,有两个脚本 yes.sh 和 no.sh,yes.sh 脚本目的是让 test.py 程序运行,所以它一旦检测到 test.py 程序没有运行,就重启它,并且如果发现 test2.py 程序运行,就结束它; no.sh 正好相反,会结束 test.py ,重启 test2.py。
    如下:
    test.py

    #!/usr/bin python
    import time
    while True:
    	time.sleep(1)
    	print 'Love!!!'
    

    test2.py

    #!/usr/bin python
    import time
    while True:
    	time.sleep(1)
    	print 'Not Love!!!'
    

    简单到令人发指。。。。。。不要在意这些,主要看逻辑

    yes.sh

    #! /bin/bash
    
    while true 
    do
    	monitor1=`ps -ef | grep test.py | grep -v grep | wc -l ` 
    	monitor2=`ps -ef | grep test2.py | grep -v grep | wc -l ` 
    	if [ $monitor2 -eq 0 ] 
    	then
    		echo "test2.py is not running"
    	else
    		echo "test2.py program is running, and kill it"
    		ps -ef|grep test2.py|grep -v grep|awk '{print $2}'|xargs kill -9 
    	fi
    
    	if [ $monitor1 -eq 0 ] 
    	then
    		echo "test.py is not running, restart test.py"
    		python /home/mk90/Documents/restart_pro/test.py
    	else
    		echo "test.py program is running"
    	fi
    	sleep 5
    done
    

    另一个脚本
    no.sh

    #! /bin/bash
    
    while true 
    do
    	monitor1=`ps -ef | grep test.py | grep -v grep | wc -l ` 
    	monitor2=`ps -ef | grep test2.py | grep -v grep | wc -l ` 
    	if [ $monitor1 -eq 0 ] 
    	then
    		echo "test.py is not running"
    	else
    		echo "test.py is running, and kill it"
    		ps -ef|grep test.py|grep -v grep|awk '{print $2}'|xargs kill -9 
    	fi
    
    	if [ $monitor2 -eq 0 ] 
    	then
    		echo "test2.py is not running, restart test2.py"
    		python /home/mk90/Documents/restart_pro/test2.py
    	else
    		echo "test2.py is running"
    	fi
    	sleep 5
    done
    

    里面涉及到的东西都解释过了,monitor1 和monitor2 分别查找 test.py 和 test2.py 进程运行情况, yes.sh 脚本里面先看 test2.py 是否运行,是的话先结束它,然后看test.py 是否运行,没有的话启动它,no.sh 正好相反。

    注意:
    要把用来结束程序的那几行指令放在前面,因为一旦启动程序的话,由于要运行的程序是一直循环运行,就无法执行下面的指令。解决的办法可以用:

    		gnome-terminal -x bash -c "python /home/mk90/Documents/restart_pro/test.py; exec bash"
    

    但是这样也有一个问题,就是每次启动一次程序,就会新开一个终端,用不了一会儿屏幕就满了。

    最后的结果如下:
    在这里插入图片描述
    就这样,两个程序相爱相杀,就像爱情一样,纠缠不清,直到时间的尽头~~~~
    当然,除了我打断它们~~~

    展开全文
  • 虾米关机程序,万能关机程序,适用于各种方式下的关机开机结束进程
  • 结束已知应用程序名的进程Demo,笔记,以备以后查用
  • 在使用电脑的过程中,有时候会出现某个程序突然卡死,无法关闭...有时我们会遇到程序无响应或者其他别的原因想要结束程序,那么我们这时候就可以结束进程。电脑用户,在操作电脑的时候,遇到程序无响应,就一直在哪...
  • APIHOOK制作免杀程序 使进程管理器结束不掉你的程序.zip
  • 工作中遇到要结束第三方进程的问题,于是进行了了解和结束第三方进程的方法 ActivityManager am = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE); am.killBackgroundProcesses...
  • 易语言强制结束进程模块源码,可以强制结束任务管理器无法关闭的进程,杀毒软件的防杀进程无法结束。大部分程序都可以结束
  • pytorch程序运行结束后不释放进程

    千次阅读 2020-01-10 23:09:38
    初学pytorch,在使用了自动后向传播之后,程序运行结束后不自动释放进程。 如图所示: 在程序中显示 在资源管理器 目前暂时没有找到好的办法,程序运行结束之后找到Python进程关闭… ...
  • 能够对对方机子实现 结束进程 返回进程 关机,注销,重启 , 运行doc命令, 打开程序 更多使用东西自己请看代码运行
  • ##后台运行程序 命令:nohup python -u test.py &amp;gt; test.log 2&amp;gt;&amp;amp;1 &amp;amp; 最后一个“&amp;amp;”表示后台运行程序 “nohup” 表示程序不被挂起 “python”表示执行...
  • 在远程服务器中用nohup挂程序,以及结束进程 在远程服务器中用nohup挂程序,以及结束进程程序程序 进入
  • 用c++结束进程程序

    千次阅读 2007-05-12 12:12:00
    用c#写了一个form的进程管理程序,最近一直就是c#和c++一起研究,所以也用c++写了一个console的结束进程程序,本来想实现查找等功能,但是其实都是很简单,也就是结束进程还是比较麻烦的,所以别的功能也没有写,...
  • c++根据程序结束进程

    千次阅读 2013-03-08 09:14:41
     //强制终止进程  CString killProcessName;  killProcessName.Format(_T("%s.exe"), WINDOWTEXT);  DWORD dwProcessId = GetProcessIdFromName(killProcessName);  HANDLE handle = OpenProcess
  • android安卓app如何彻底结束进程. 光调用finish()是结束不了程序的,程序中的线程依旧在后台运行
  • 程序进程程序进程程序进程程序进程程序进程程序进程
  • 一个简单的包括关机,和文件监视,打开程序结束进程等功能的小程序。。
  • Python根据程序名称结束进程

    千次阅读 2018-12-10 11:19:52
    print '已杀死pid为%s的进程, 返回值是:%s' % (pid, kill_pid) except Exception as e: print '没有如此进程!!!' if __name__ == '__main__': dic=getAllPid() for t in dic.keys(): if dic[t]=="360se.exe...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 533,844
精华内容 213,537
关键字:

怎样结束程序进程