命令提示符下使用taskkill /im 进程名即可,必要是加/f强制结束
创新互联专注于中大型企业的网站设计、成都网站建设和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户上1000+,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注成都品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!
taskkill /?
TASKKILL [/S system [/U username [/P [password]]]]
{ [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]
描述:
使用该工具按照进程 ID (PID) 或映像名称终止任务。
参数列表:
/S system 指定要连接的远程系统。
/U [domain\]user 指定应该在哪个用户上下文执行这个命令。
/P [password] 为提供的用户上下文指定密码。如果忽略,提示
输入。
/FI filter 应用筛选器以选择一组任务。
允许使用 "*"。例如,映像名称 eq acme*
/PID processid 指定要终止的进程的 PID。
使用 TaskList 取得 PID。
/IM imagename 指定要终止的进程的映像名称。通配符 '*'可用来
指定所有任务或映像名称。
/T 终止指定的进程和由它启用的子进程。
/F 指定强制终止进程。
/? 显示帮助消息。
筛选器:
筛选器名 有效运算符 有效值
----------- --------------- -------------------------
STATUS eq, ne RUNNING |
NOT RESPONDING | UNKNOWN
IMAGENAME eq, ne 映像名称
PID eq, ne, gt, lt, ge, le PID 值
SESSION eq, ne, gt, lt, ge, le 会话编号。
CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为
hh:mm:ss。
hh - 时,
mm - 分,ss - 秒
MEMUSAGE eq, ne, gt, lt, ge, le 内存使用量,单位为 KB
USERNAME eq, ne 用户名,格式为 [domain\]user
MODULES eq, ne DLL 名称
SERVICES eq, ne 服务名称
WINDOWTITLE eq, ne 窗口标题
说明
----
1) 只有在应用筛选器的情况下,/IM 切换才能使用通配符 '*'。
2) 远程进程总是要强行 (/F) 终止。
3) 当指定远程机器时,不支持 "WINDOWTITLE" 和 "STATUS" 筛选器。
例如:
TASKKILL /IM notepad.exe
TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
TASKKILL /F /IM cmd.exe /T
TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *
TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"
Windows 任务管理器太弱了.
Linux 上面可以用 htop 工具查看进程树结构, 如果进入 htop 是平板结构, 按 F5 切换为树形结构.
Windows 上需要下载一个工具叫做 Process Explorer, 里面能以树装形式列举各个进程, 非常方便. (但是我已经好久没用 Win 了不太记得怎么操作也不知道最近版本有没有大更新)
"在java里面去看,哪些程序调用了java" 这个我没试过. (老实说觉得不太可能做到, 操作系统进程管理一般让父进程来管理子进程而不是反过来. 即使 JPS 好像也要受限于此吧.)
如果确定 JPS 可以看到父进程并且拿到 id 的话, 在 Linux shell 下面可以通过
jps | awk '{print "kill", $1}' | sh
来杀掉这些进程. windows 上建议安装 cygwin 工具并把 cygwin_root/bin 目录加入系统 path, 这样在命令行中就可以使用了.
建议不要用 java 或者其它编程语言方式实现, 太麻烦了.
首先,Java不允许你控制资源的释放,所有的资源释放都是由JVM来管理的,除非你退出JVM。
当你对资源调用dispose方法时,实际上是将资源的状态置为已废弃,gc会自动来将资源释放掉。
其次,setDefaultCloseOperation()方法是用来设置用户在此窗体上发起 "close" 时默认执行的操作。其中DISPOSE_ON_CLOSE调用任意已注册WindowListener的对象后隐藏并释放该窗体;EXIT_ON_CLOSE则使用System exit方法退出JVM。
dispose()是Window类的方法,并非Container类,它的JDK APIDOC里面这样描述:
释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。
通过随后调用 pack 或 show 重新构造本机资源,可以再次显示 Window 及其子组件。重新创建的 Window 及其子组件的状态与释放 Window 时这些对象的状态一致(不考虑这些操作之间的其他更改)。
注:当 Java 虚拟机 (VM) 中最后的可显示窗口被释放后,虚拟机可能会终止。
也就是说,调用dispose()方法是将对象占用的本地屏幕资源(screen resources)释放,对象本身并没有释放,只是底层的对应点已经释放了,所以仍然是可用的。
当然,调用底层本地屏幕资源已经被释放的对象可能会出现一些错误,有时会报一个SWTException: Widget is disposed...。
如果你的程序已经没有其他线程在运行的话,当所有的窗口都被dispose了之后,JVM也会退出。
你的问题中,只需要将该子窗口dispose掉,并且将对该窗口的引用置为null,不用管它是否还能使用,gc会自动将对象释放的(不会立即释放,对象有它的生命周期,gc会依照自己的算法进行资源回收)。
pro.waitFor();
导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程。
一般都是用一个线程去做处理运行,另一个线程来做管理,
try {
final Process pro = Runtime.getRuntime().exec("notepad.exe");
new Thread(new Runnable() {
public void run() {
try {
pro.waitFor();
System.out.println(1);
pro.destroy();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
pro.destroy();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
我用的是一个新的线程,一般用主线程去做处理,控制他的关闭。你的另一个其他代码也可以执行。对于cmd这个窗体,就完全没有思路了,java程序是没办法把他关闭掉,应该是dos的权限比java的大吧。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款