精华内容
下载资源
问答
  • 在Win7系统中,我们一般通过任务管理器来查看和结束进程,但最近有用户反映在打开任务...下面小编就给大家分享下Win7任务管理器进程一直在跳动选中不了的处理方法。  方法一:使用镜像名称查看  打开进程查看器后
    在Win7系统中,我们一般通过任务管理器来查看和结束进程,但最近有用户反映在打开任务管理器想要结束某个进程时发现列表中的进程信息在不断跳动变化,导致无法选中进程。这是怎么回事呢?其实是因为系统中的进程内存和CPU的使用量在不停的变化,所以进程的排序也就跟着刷新变化。下面小编就给大家分享下Win7任务管理器进程一直在跳动选中不了的处理方法。
    

    Win7任务管理器进程一直在跳动选中不了的处理方法

      方法一:使用镜像名称查看

      打开进程查看器后,我们点击按镜像名称查看排序方式,这时进程就只会按名称来排序,就不会因为根据CPU和内存的占用量变化排序而导致进程“上窜下跳”了;

    Win7任务管理器进程一直在跳动选中不了的处理方法

      方法二:按住CTRL键使进程变动停止

      当我们按下键盘上的CTRL键时,进程列表会呈现静止状态,这时我们就可以很方便的选中进程来进行操作了,当然这只是图像上静止,后台进程还是在不停变动的,松手会就继续变动了。

      以上就是Win7任务管理器进程乱跳无法选中的处理方法,进程乱跳无法选中主要是查看方式不对,只要我们换一种方式来查看就可以了。

    展开全文
  • 哎,突然间,老毛病又烦了,想起原来一直有个编程的问题没有解决——禁止别人用任务管理器,结束自己的程序进程(.NET程序)。带着这个问题,我开始Google,开始baidu,又开始编程了。和原来的搜索结果一样,什么东西...

    闲来无事,英语又学的太痛苦。看到我妈妈电脑开起在,就坐上去看看新闻,听听音乐。哎,突然间,老毛病又烦了,想起原来一直有个编程的问题没有解决——禁止别人用任务管理器,结束自己的程序进程(.NET程序)。带着这个问题,我开始Google,开始baidu,又开始编程了。和原来的搜索结果一样,什么东西都是一筹莫展,得到的答案永远是:C#没有办法自己去禁止别人用任务管理器结束自己进程。不过功夫不负有心人。我还是找到一大堆的替代方法,可以让别人不结束自己进程的方法。

          

     

     

    总结方法有:

        

     

     

    1.      把任务管理器程序给别人删除了,不让别人打开(妈呀,这个我觉得最不可取了,有点杀鸡取卵的味道,没有任务管理器,我是无法忍受的。毕竟人家用户,购买了你产品,你总不可能把别人任务管理器给洗白了吧?)否决!

        

     

     

    2.      接下来这个比较温柔,通过C#内置的Process类,对任务管理器的进程进行扫描,如果检查到有taskmgr.exe的进程(任务管理器进程),就把这个进程结束了。(虽然没有第一个来的恶劣,但是,用户还是不能使用任务管理器)否决!

          

     

     

    3.      写两个程序进行双保护。这个想法是网上提的最多的思路,如果一个程序被结束了,另一个程序检测到这个程序不在了,就立即重新启动该程序,双双保护,互助互利(结果我尝试了一下,不可取,因为1,CPU使用率太高,一直在循环检测,计算机速度立即就下了。我妈妈这个机子,P4的配置,1G内存,也来不起了。网页也卡起了。2,我写了一个第三方程序,以最快速率去结束这个两个进程,如果这两个进程为了节约CPU的使用率,而把扫描间隔时间隔的太开的话,立刻被我的程序洗白。所以,理论上这种方法,肯定是会被洗白的)否决

         

     

     

    4.      技术含量比较高了,通过Windows的驱动机制,把自己给隐藏了(把自己变成驱动),然后隐藏到系统中运行,在任务管理器完全找不到,其实我多喜欢这种方式的,但是,这个程序一弄出来,瑞星,Google,Hotmail,360卫士,全部当成病毒查出来了,我当时眼流花都要流出来了。他们都太不给面子,Google,Hotmail直接把我的附件删除了。随便我压缩,分包压缩,都逃不过他们的法眼。所以,我清楚的意识到,这种程序弄出来,在客户机器上,肯定是无法长久生存的。毕竟一个堂堂正正的程序,干嘛要去隐藏呢?所以。该条方案否决!

          

     

     

    5.      用第三方的VC++程序,辅助C#程序达到不让别人禁止C#进程的方法。哎,弄了半天,这种方法,我认为最行之有效。毕竟不得不承认,要搞Windows系统级的程序设计,C++是当之无愧的龙头老大,C#只是一个做网站级应用的能手。不过,你发布一个程序给用户,用户看到那个任务管理器里面还有个其他程序在运作或者是看到你的安装包里面怎么还有其他程序名字,确实感觉太不专业,太不地道了。话又说回来,这种辅助程序一般都要收费。我下载的那个就要收费。所以,最后,这个方案也否决了!

           

     

     

    难道,C#真的就不能自己弄个什么名堂的东西出来,不被任务管理器结束吗?实际,我认为,C#是可以做到这一点的。原因有2个。1,C#是支持带*号这种指针的方式的。也就是说,C#可以使用指针。2,C#可以完全无障碍的调用Windows自己的API函数(虽然性能没有VC++开发的好),调用第三方开发的COM组件,甚至调用USB插口接口相关信息(曾今做U盘杀毒的时候,用到过,不过主要还是结合API完成的,一个未公开的API函数R开头的忘记了)。所以,为此,我抱着信心开始准备找第三方提供的动态链接库之类的东西,毕竟要自己写,C#还是有许多性能和调用方面的麻烦问题要考虑,毕竟不是毕业设计,所以,能简单就简单,只要克服以上提到的5种方法的不足。

          

     

     

    最后,功夫不负有心人,找了大半天,找到了一个叫Peter的牛人,写了一个通过VC++程序调用VC++动态链接库,实现的VC++程序不被任务管理器结束的源代码。幸亏源代码相当详尽(VC++动态链接库的源码,VC++应用程序源码),要不然,后面的活路,就没有办法做了。于是我开始,慢慢,慢慢走上辛苦的VC++代码分析上。你们可能要问我干什么?我可以很坦然的告诉你,虽然我VC++能力确实不强,但是我要把VC++的代码,移植到C#上。听起来,很不可思意,但是,我真的成功了。最后,为了报答我的学校——成都电子机械高等专科学校和成都信息工程学院。我把VC++应用程序调用代码,移植到.NET上,并且,为了调用方便,我做成了.NET可以识别的dll运行库。只要按以下方式调用运行即可。这个dll运行库可以保护自己进程,也可以通过设置保护其他进程,作为第三方动态链接库存在。(很幸运,虽然这个第三方动态链接库我还是很花了些时间,但是绝对不收费,免费放送,提供C#工程源码下载!如果大家有兴趣也可以一起讨论一下,我的邮件是Email:k.liuxu@gmail.com),至于那个牛人的设计思路,其实,就是用系统函数挂钩,挂接了所有的系统函数消息。没有直接分析任务管理器这些东西。不过,在CMD命令控制台中,无法接受消息,所以,用命令控制台,是可以结束进程的。不过,命令控制台,一般用户不会使用,可以直接把命令控制台删除,或者移植到程序内部调用,不准用户外部调用,就行了。至于其他更麻烦的东西,就有兴趣大家在慢慢聊吧。

         

     

     

    前面分析VC++代码是一个艰苦的历程,简直是挥泪分析啊,眼睛都看肿了,才把VC++应用程序部分移植出来。其实总结了一下,实际上还是因为自己学习不扎实,所以才看的恼火,对不起电子高专培养我的刘光会和杨勇老师,对不起信息工程学院的安俊秀和陈晓红老师。不过最后弄出来了,还是一件好事情吧,也充分说明了C#还是可以搞一些基于系统级的调用和编程的。也许在大鸟眼睛中,移植这种工作并不算什么,这种程序也许是小儿科,不过,对于,刚刚毕业的我来说,还是一种不小的挑战。

          

     

     

    由于时间有限,我只把前半部分的VC++应用程序端移植完成,在以后的时间中,等我把Dll部分抽象出来,我会做成.NET可以识别的dll发布出来。如果还有时间,我就再来说说,我怎么分析的吧。不过这个可能要说很久很久了,毕竟涵盖了5年我大学学习的所有基础知识,大到系统,小到函数指针,代理,枚举这些结构,内存存储空间等等。好了废话不多说了。现在主要看看怎么使用。

     

        首先,我们必须具备两个DLL文件,一个是我用.NET程序生成的KProtectProcess.dll文件,这个文件可以直接放到VS.NET开发环境中进行使用。还有一个是我还没有编译出来的NKCore.dll文件(其实我移植了一半,但是里面设计很多系统关键字,我在C#中还没有找到很好的解决方案,所以正在研究),这个文件是C++的运行库,实际上核心也是这个文件。

         

     

     


        1首先我们新建立一个工程。如下:

       

     

    2.按照如图,放置这些控件,以便我们操作

     

     

     

    3.添加引用.NET可以识别的KProtectProcess.dll动态链接库(VB.NET,J#.NET,VC++.NET都可以调用)右键项目,选择添加引用:

     

     

          

     

     

     

    4.找到KProtectProcess.dll这个文件并添加(注意保持,KProtectProcess.dll文件和NKCore.dll文件在同一目录中)

     

    5.点确定以后,你会看到工程中,多了一个程序集KProtectProcess.dll

             

     

     

    6.双击,按钮进入代码的编写,(其中保护自己,停止保护自己,保护其他进程,停止保护其他进程按钮的名字分别是:button1,button2,button3,button4),具体调用代码编写如下(代码调用,已经简化的相当简单了):自身保护调用SelfProtection(),自身释放调用UnLoadProtection(),其他进程保护,首先调用ProtectProcessID赋值,然后调用ProtectProcess进行保护,如果不赋值,我会抛出一个异常。

     

     

     

     

     

     

     

     

    7.       所有工作都准备完毕就可以调试了。其中以下演示怎么保护其他进程。比如我们现在打开Windows计算器这个程序,计算器这个程序的进程名是calc.exe,所以,我们就找他的进程号PID.1764

     

      

                    

     

       

     

             

     

     

         现在只需要在程序的进程号中输入,1764,然后点保护,最后,你看用任务管理器是不是不能结束calc这个程序了?很简单吧?

          

               

     

                     

                                

     结束语:

      

    (1).NET程序原代码下载地址为(大小47KB):TestClose.rar

        

    (2)两个动态连接库文件(大小14KB):Dll.rar

         

    (3).NET可识别的Dll我移植出来的.cs文件(7KB):KProcess.rar

          

    (4)VC++原始代码文件(大小10KB):vc.rar

           

     

     

       以上程序使用的是VisualStudio.NET 2010,(C#),在XP SP2上测试通过。如果有任何问题的话,请各位大侠多多指教。

    展开全文
  • C# 保护进程不结束(源代码)

    千次阅读 2013-12-25 10:42:20
    哎,突然间,老毛病又烦了,想起原来一直有个编程的问题没有解决——禁止别人用任务管理器,结束自己的程序进程(.NET程序)。带着这个问题,我开始Google,开始baidu,又开始编程了。和原来的搜索结果一样,什么东西...

    闲来无事,英语又学的太痛苦。看到我妈妈电脑开起在,就坐上去看看新闻,听听音乐。哎,突然间,老毛病又烦了,想起原来一直有个编程的问题没有解决——禁止别人用任务管理器,结束自己的程序进程(.NET程序)。带着这个问题,我开始Google,开始baidu,又开始编程了。和原来的搜索结果一样,什么东西都是一筹莫展,得到的答案永远是:C#没有办法自己去禁止别人用任务管理器结束自己进程。不过功夫不负有心人。我还是找到一大堆的替代方法,可以让别人不结束自己进程的方法。

          

     

     

    总结方法有:

        

     

     

    1.      把任务管理器程序给别人删除了,不让别人打开(妈呀,这个我觉得最不可取了,有点杀鸡取卵的味道,没有任务管理器,我是无法忍受的。毕竟人家用户,购买了你产品,你总不可能把别人任务管理器给洗白了吧?)否决!

        

     

     

    2.      接下来这个比较温柔,通过C#内置的Process类,对任务管理器的进程进行扫描,如果检查到有taskmgr.exe的进程(任务管理器进程),就把这个进程结束了。(虽然没有第一个来的恶劣,但是,用户还是不能使用任务管理器)否决!

          

     

     

    3.      写两个程序进行双保护。这个想法是网上提的最多的思路,如果一个程序被结束了,另一个程序检测到这个程序不在了,就立即重新启动该程序,双双保护,互助互利(结果我尝试了一下,不可取,因为1,CPU使用率太高,一直在循环检测,计算机速度立即就下了。我妈妈这个机子,P4的配置,1G内存,也来不起了。网页也卡起了。2,我写了一个第三方程序,以最快速率去结束这个两个进程,如果这两个进程为了节约CPU的使用率,而把扫描间隔时间隔的太开的话,立刻被我的程序洗白。所以,理论上这种方法,肯定是会被洗白的)否决

         

     

     

    4.      技术含量比较高了,通过Windows的驱动机制,把自己给隐藏了(把自己变成驱动),然后隐藏到系统中运行,在任务管理器完全找不到,其实我多喜欢这种方式的,但是,这个程序一弄出来,瑞星,Google,Hotmail,360卫士,全部当成病毒查出来了,我当时眼流花都要流出来了。他们都太不给面子,Google,Hotmail直接把我的附件删除了。随便我压缩,分包压缩,都逃不过他们的法眼。所以,我清楚的意识到,这种程序弄出来,在客户机器上,肯定是无法长久生存的。毕竟一个堂堂正正的程序,干嘛要去隐藏呢?所以。该条方案否决!

          

     

     

    5.      用第三方的VC++程序,辅助C#程序达到不让别人禁止C#进程的方法。哎,弄了半天,这种方法,我认为最行之有效。毕竟不得不承认,要搞Windows系统级的程序设计,C++是当之无愧的龙头老大,C#只是一个做网站级应用的能手。不过,你发布一个程序给用户,用户看到那个任务管理器里面还有个其他程序在运作或者是看到你的安装包里面怎么还有其他程序名字,确实感觉太不专业,太不地道了。话又说回来,这种辅助程序一般都要收费。我下载的那个就要收费。所以,最后,这个方案也否决了!

           

     

     

    难道,C#真的就不能自己弄个什么名堂的东西出来,不被任务管理器结束吗?实际,我认为,C#是可以做到这一点的。原因有2个。1,C#是支持带*号这种指针的方式的。也就是说,C#可以使用指针。2,C#可以完全无障碍的调用Windows自己的API函数(虽然性能没有VC++开发的好),调用第三方开发的COM组件,甚至调用USB插口接口相关信息(曾今做U盘杀毒的时候,用到过,不过主要还是结合API完成的,一个未公开的API函数R开头的忘记了)。所以,为此,我抱着信心开始准备找第三方提供的动态链接库之类的东西,毕竟要自己写,C#还是有许多性能和调用方面的麻烦问题要考虑,毕竟不是毕业设计,所以,能简单就简单,只要克服以上提到的5种方法的不足。

          

     

     

    最后,功夫不负有心人,找了大半天,找到了一个叫Peter的牛人,写了一个通过VC++程序调用VC++动态链接库,实现的VC++程序不被任务管理器结束的源代码。幸亏源代码相当详尽(VC++动态链接库的源码,VC++应用程序源码),要不然,后面的活路,就没有办法做了。于是我开始,慢慢,慢慢走上辛苦的VC++代码分析上。你们可能要问我干什么?我可以很坦然的告诉你,虽然我VC++能力确实不强,但是我要把VC++的代码,移植到C#上。听起来,很不可思意,但是,我真的成功了。最后,为了报答我的学校——成都电子机械高等专科学校和成都信息工程学院。我把VC++应用程序调用代码,移植到.NET上,并且,为了调用方便,我做成了.NET可以识别的dll运行库。只要按以下方式调用运行即可。这个dll运行库可以保护自己进程,也可以通过设置保护其他进程,作为第三方动态链接库存在。(很幸运,虽然这个第三方动态链接库我还是很花了些时间,但是绝对不收费,免费放送,提供C#工程源码下载!如果大家有兴趣也可以一起讨论一下,我的邮件是Email:k.liuxu@gmail.com),至于那个牛人的设计思路,其实,就是用系统函数挂钩,挂接了所有的系统函数消息。没有直接分析任务管理器这些东西。不过,在CMD命令控制台中,无法接受消息,所以,用命令控制台,是可以结束进程的。不过,命令控制台,一般用户不会使用,可以直接把命令控制台删除,或者移植到程序内部调用,不准用户外部调用,就行了。至于其他更麻烦的东西,就有兴趣大家在慢慢聊吧。

         

     

     

    前面分析VC++代码是一个艰苦的历程,简直是挥泪分析啊,眼睛都看肿了,才把VC++应用程序部分移植出来。其实总结了一下,实际上还是因为自己学习不扎实,所以才看的恼火,对不起电子高专培养我的刘光会和杨勇老师,对不起信息工程学院的安俊秀和陈晓红老师。不过最后弄出来了,还是一件好事情吧,也充分说明了C#还是可以搞一些基于系统级的调用和编程的。也许在大鸟眼睛中,移植这种工作并不算什么,这种程序也许是小儿科,不过,对于,刚刚毕业的我来说,还是一种不小的挑战。

          

     

     

    由于时间有限,我只把前半部分的VC++应用程序端移植完成,在以后的时间中,等我把Dll部分抽象出来,我会做成.NET可以识别的dll发布出来。如果还有时间,我就再来说说,我怎么分析的吧。不过这个可能要说很久很久了,毕竟涵盖了5年我大学学习的所有基础知识,大到系统,小到函数指针,代理,枚举这些结构,内存存储空间等等。好了废话不多说了。现在主要看看怎么使用。

        首先,我们必须具备两个DLL文件,一个是我用.NET程序生成的KProtectProcess.dll文件,这个文件可以直接放到VS.NET开发环境中进行使用。还有一个是我还没有编译出来的NKCore.dll文件(其实我移植了一半,但是里面设计很多系统关键字,我在C#中还没有找到很好的解决方案,所以正在研究),这个文件是C++的运行库,实际上核心也是这个文件。

         

     


        1首先我们新建立一个工程。如下:

       

    2.按照如图,放置这些控件,以便我们操作

     

    3.添加引用.NET可以识别的KProtectProcess.dll动态链接库(VB.NET,J#.NET,VC++.NET都可以调用)右键项目,选择添加引用:

     

          

     

     

    4.找到KProtectProcess.dll这个文件并添加(注意保持,KProtectProcess.dll文件和NKCore.dll文件在同一目录中)


    5.点确定以后,你会看到工程中,多了一个程序集KProtectProcess.dll

             

     

    6.双击,按钮进入代码的编写,(其中保护自己,停止保护自己,保护其他进程,停止保护其他进程按钮的名字分别是:button1,button2,button3,button4),具体调用代码编写如下(代码调用,已经简化的相当简单了):自身保护调用SelfProtection(),自身释放调用UnLoadProtection(),其他进程保护,首先调用ProtectProcessID赋值,然后调用ProtectProcess进行保护,如果不赋值,我会抛出一个异常。

     

     

     

     

     

    7.       所有工作都准备完毕就可以调试了。其中以下演示怎么保护其他进程。比如我们现在打开Windows计算器这个程序,计算器这个程序的进程名是calc.exe,所以,我们就找他的进程号PID.1764

     

     

       

                     

     

       

             

     

     

         现在只需要在程序的进程号中输入,1764,然后点保护,最后,你看用任务管理器是不是不能结束calc这个程序了?很简单吧?

          

               

                     

                                

     结束语:

      

    (1).NET程序原代码下载地址为(大小47KB):http://www.aozoz.com/KangKang/TestClose.rar

        

    (2)两个动态连接库文件(大小14KB):http://www.aozoz.com/KangKang/Dll.rar

         

    (3).NET可识别的Dll我移植出来的.cs文件(7KB):http://www.aozoz.com/KangKang/KProcess.rar

          

    (4)VC++原始代码文件(大小10KB):http://www.aozoz.com/KangKang/vc.rar

           

     

       由于,我用的是自己的虚拟主机存放以上文件,不晓得什么时候会出现问题,所以,如果不能下载的话,请给我发邮件 Email:k.liuxu@gmail.com.如果有什么技术需要讨论的也可以给我邮件,我真诚希望大家共同交流互相探讨。技术细节都在代码中,最近忙到复习英语,所以,没有时间再往下写了。以上程序使用的是VisualStudio.NET 2005,(C#),在XP SP2上测试通过。如果有任何问题的话,请各位大侠多多指教。


    现在虚拟主机到期了,所以暂时没有办法下载了。如果急需要下载的,请到这个地方下载:http://download.csdn.net/source/2486233,不过这个地方下载需要2个积分。只要注册了,就有积分的。等虚拟主机弄好了。我再把链接发到这边。


    http://blog.csdn.net/kangkanglx/article/details/5692984

    展开全文
  • 在项目中需要调用子程序,用Process方式重定向标准输出和错误输出到主进程,创建并启动子进程后发现运行到一定步骤就一直在输出相同信息,像卡住了一样,一直不结束; 而用cmd用相同的调用参数运行子程序发现能够...

    1.问题

    在项目中需要调用子程序,用Process方式重定向标准输出和错误输出到主进程,创建并启动子进程后发现运行到一定步骤就一直在输出相同信息,像卡住了一样,一直不结束;

    而用cmd用相同的调用参数运行子程序发现能够正常运行和结束。

    那么是什么原因呢?初步分析在代码中使用Process的方式考虑的不够完善,运行的过程中发生了某种暂时“不明确的行为”。

    2.解决思路

    2.1.搜索相关关键词

    Process方式和直接用cmd调用 两者的调用参数一致,并且都能运行,首先bing/baidu上搜索了相关的关键词,发现有些使用Process的示例博客文章,

    初步了解了Process各种参数的意义和用法,虽然没找到和问题直接相关的文章资料,但也算有所收获。

    如:https://blog.csdn.net/e295166319/article/details/77932082C# Process方法调用cmd执行命令;

    2.2.看Microsoft的帮助文章

     

    比如,在光标放在p.StartInfo.RedirectStandardError = true;上按F1,跳出如下文章,

    ProcessStartInfo.RedirectStandardError Property

     

    建议看英文,中文有时候翻译的很生硬,反而容易理解错误或者不明所以,为了让自己情绪稳定一点还是看原文吧,一般在右上角或者左下角有切换语言的入口!

    往下翻,边看边翻,慢点没关系,就怕错过了关键点~

    嗯?好像是这里~

    2.2.1.场景一


    The following example shows how to read from a redirected error stream and wait for the child process to exit. It avoids a deadlock condition by calling p.StandardError.ReadToEnd before p.WaitForExit. A deadlock condition can result if the parent process calls p.WaitForExit before p.StandardError.ReadToEnd and the child process writes enough text to fill the redirected stream. The parent process would wait indefinitely for the child process to exit. The child process would wait indefinitely for the parent to read from the full StandardError stream.


    using System;
    using System.Diagnostics;
    
    public class Example
    {
       public static void Main()
       {
          var p = new Process();  
          p.StartInfo.UseShellExecute = false;  
          p.StartInfo.RedirectStandardError = true;  
          p.StartInfo.FileName = "Write500Lines.exe";  
          p.Start();  
    
          // To avoid deadlocks, always read the output stream first and then wait.  
          string output = p.StandardError.ReadToEnd();  
          p.WaitForExit();
    
          Console.WriteLine($"\nError stream: {output}");
       }
    }
    // The end of the output produced by the example includes the following:
    //      Error stream:
    //      Successfully wrote 500 lines.

    当发生上图中的场景时,主线程和子线程前进一步都显得遥遥无期,发生了死锁。

    2.2.2.场景二

    There is a similar issue when you read all text from both the standard output and standard error streams. The following C# code, for example, performs a read operation on both streams. It avoids the deadlock condition by performing asynchronous read operations on the StandardError stream. A deadlock condition results if the parent process calls p.StandardOutput.ReadToEnd followed by p.StandardError.ReadToEnd and the child process writes enough text to fill its error stream. The parent process would wait indefinitely for the child process to close its StandardOutput stream. The child process would wait indefinitely for the parent to read from the full StandardError stream.

    using System;
    using System.Diagnostics;
    
    public class Example
    {
       public static void Main()
       {
          var p = new Process();  
          p.StartInfo.UseShellExecute = false;  
          p.StartInfo.RedirectStandardOutput = true;  
          string eOut = null;
          p.StartInfo.RedirectStandardError = true;
          p.ErrorDataReceived += new DataReceivedEventHandler((sender, e) => 
                                     { eOut += e.Data; });
          p.StartInfo.FileName = "Write500Lines.exe";  
          p.Start();  
    
          // To avoid deadlocks, use an asynchronous read operation on at least one of the streams.  
          p.BeginErrorReadLine();
          string output = p.StandardOutput.ReadToEnd();  
          p.WaitForExit();
    
          Console.WriteLine($"The last 50 characters in the output stream are:\n'{output.Substring(output.Length - 50)}'");
          Console.WriteLine($"\nError stream: {eOut}");
       }
    }
    // The example displays the following output:
    //      The last 50 characters in the output stream are:
    //      ' 49,800.20%
    //      Line 500 of 500 written: 49,900.20%
    //      '
    //
    //      Error stream: Successfully wrote 500 lines.

    该场景和场景一类似。

    2.3.解决方案

    避免相互等待而发生死锁的情况,按照帮助文档中的描述,采用异步读取StandardError。

    using (Process p = new Process())
    {
        p.StartInfo.FileName = "java.exe";
        p.StartInfo.UseShellExecute = false;        //是否使用操作系统shell启动
        p.StartInfo.RedirectStandardInput = false;  //接受来自调用程序的输入信息
        p.StartInfo.RedirectStandardOutput = true;  //由调用程序获取输出信息
        p.StartInfo.RedirectStandardError = true;   //重定向标准错误输出
        p.ErrorDataReceived += new DataReceivedEventHandler((sender, e) =>
        {
            Console.WriteLine(e.Data);
        });
    
        p.StartInfo.CreateNoWindow = true;          //不显示程序窗口
        p.StartInfo.Arguments = argumentsFortheJarFile;
        if (!p.Start()) //启动程序
        {
            Console.WriteLine("未能启动程序:" + jarFile);
            return;
        }
    
        // To avoid deadlocks, use an asynchronous read operation on at least one of the streams.  
        p.BeginErrorReadLine();
    
        //获取cmd窗口的输出信息
        while (!p.StandardOutput.EndOfStream)
        {
            string oneLine = p.StandardOutput.ReadLine();
    
            Console.WriteLine(oneLine);
        }
            p.StandardOutput.Close();
    
            p.WaitForExit();//等待程序执行完退出进程
            p.Close();
    }

     

    展开全文
  • Electron源码学习:Windows下子进程跟随父进程结束的方式 前言 ​ 最近在nodejs中使用了child_process来创建进程,惊奇的发现当使用child_process.spawn函数来创建的子进程会跟随父进程一起被Kill掉,管子进程...
  • 虚拟机运行时(我是一直开,但是已经启动了),点击下面那个位置(启动之后是第二幅图的样子,网上搜的图),就会出现卡死,那个按键是能点的。 2.解决方案 在平时的工作中,大家常常会碰到一些进程没有法...
  • Linux 结束进程快捷键

    千次阅读 2017-02-05 17:22:53
    一直在里面递归跳出来, 任何的输入都不行,急得我呀…… 在试了众多以前在Win下有用的快捷键无效后, 只好用Alt+F3重新回到了登录前的界面, 唉~~这种遇到问题知道怎么解决的情况让我感觉很爽...
  • C# 保护进程不结束(源代码)

    千次阅读 2011-01-30 22:38:00
    ...哎,突然间,老毛病又烦了,想起原来一直有个编程的问题没有解决——禁止别人用任务管理器,结束自己的
  • 虽然它后来被MATLAB收购了,但是我一直青睐使用它来实现MATLAB和VC的混合编程,因为现在的MATLAB让我很恼火。原因在于:现在要想把M文件或者M函数或者GUI程序让VC可以调用的话,哪怕你要转换的代码只有几行,也要带...
  • 结束monkey自动化测试进程

    千次阅读 2015-01-06 11:18:53
    今日上班发现,Android手机上的monkey进程还在,一直再跑,关机重启都不行。网上找了半天,都是一个样。还不如自己写一个。 1.cmd进入DOS窗口 2.使用adb shell ps monkey命令,查看monkey的进程信息。(我这没用...
  • 1、今天在项目里用swoole,小心在配置里开启了守护进程(即进程在后台一直运行) 2、结果调试socket代码的时候,结束进程重新开启,一直显示端口被占用 3、此时就算是关闭了terminal命令运行窗口,重新打开...
  • 小弟刚学python,有个问题想请教,父进程与子进程的问题,求大神解答,代码在下面给出: 源代码: ...程序未结束,可是显示父进程的东西了,到底为什么,搞懂了,大神解释下啊!谢谢各位了!!!
  • 最近总蓝屏死机,发现是其中一个svchost进程一直占用我cpu使用率25%导致机器非常热,散热风扇狂转,像被人当矿机了,断网1,2分钟就会好,连接网络几分钟就又开始了,结束我的这个进程,过一会又开始了,后来用process ...
  • 僵尸进程

    2019-05-29 16:35:00
    在unix进程管理中,如果你新开的子进程运行结束,父进程将会收到一个SIGCHLD信号,子进程成为僵尸进程(保存了进程的状态等信息),等待父进程的处理,如果父进程一直不处理,该进程将会一直存在,占用系统进程表项,如果僵尸...
  • 结束的后台进程必须为文件全称并有扩展名:.exe .cmd. .bat等。如:判断快播的 软件qvodplayer.exe可以写为:quvodplay* ,但结束后台进程就必须为QvodTerminal.exe , 每个进程必须按例中格式输入,请注意有...
  • Linux进程7.进程等待

    2020-10-28 20:06:03
    他需要父进程来为它收尸,如果父进程没有安装SIGCHLD信号处理函数,调用wait()或者waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态。如果这时父进程结束了,那么init进程会自动接手这个子...
  • Android 杀死的进程

    2017-10-21 14:21:45
    最近和同事讨论微信杀死进程结束后,还能收到好友发来的微信这功能。以前一直用着,没有去研究这技术。最近项目提前完成,有了点空闲时间,就研究这技术。然后写了个demo,试着运行,发现OK了。在这给朋友分享下,...
  • 进程结束时,OS回向父进程发送一个SIGCHILD信号,关于信号会在下一个课程讲解, 父进程调用wait阻塞,wait是阻塞式的,父进程调用wait会被阻塞住,父进程调用wait就会一直在这里等SIGCHILD信号,收到这个信号就...
  • spark on yarn通过--deploy-mode cluster提交任务之后,应用已经在yarn上执行了,但是spark-submit提交进程还在,直到应用执行结束,提交进程才会退出,有时这会很方便,并且注意的话还会占用很多资源,比如提交...
  • 在PyQT窗口退出时,子进程一直退出彻底,而且多次运行也开启了多个子进程,所以想在退出时批量关闭它们,可以用下面的命令: ps aux | grep 进程名 | awk '{print $2}' | xargs kill -9 或者: ps -ef | grep...
  • 子进程执行完毕后会发送一个exit()信号,父进程没有去处理,导致这个子进程一直在进程表中。 解决方法: 1.重启服务器电脑 2.找到僵尸进程的父进程杀掉 kill -9,而不是去杀僵尸线程。 孤儿进程 父进程退出后...
  • 1.首先打开任务管理器结束VM share的进程 2.结束进程以后,按下快捷键windows+R,出现以下界面: 输入msconfig进入以下...重启完电脑以后(这个时候已经彻底结束了虚拟机进程,为什么直接重启电脑,而要在上面...
  • Linux进程讲解 五 进程优先级

    千次阅读 2018-08-23 16:45:13
    之前我们介绍进程的时候就说过,为什么要有PCB,PCB记录了很多信息,因为我们的程序并不是说,一直在CPU运行直到结束,而是一个进程运行一会,另一个再运行一会。所以来说进程占用CPU应该是一个我们可控的东西,因为...
  • 写了一个简单的测试程序,就是java查询数据库的,后面发现了数据库查询结束后,进程一直不会结束,在调试的时候,发现生成了一个线程,是这个线程关闭。 /** * */ package com.test.mysql; import org....
  • 父进程和子进程是并行运行的,先运行哪个是确定的,在小红帽系统中,先运行的是子...= pid 等待子进程的结束,父进程一直阻塞在这个函数中,阻塞或阻塞跟第三个参数有关系。 举例: #include <sys/types.h...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 485
精华内容 194
关键字:

进程一直结束不了