草庐IT

【JavaEE】进程和线程

全部标签

windows - 什么会导致 C++Builder/Delphi 线程和应用程序无法关闭?

有一次,在测试期间,我的C++Builder/Delphi应用程序在后台工作线程中引发了一个未捕获的异常。EurekaLog如我所料,捕获了异常并发送了错误报告,一切似乎都正常。但是,当我关闭应用程序的主窗口时,某些东西仍在后台运行,因为该应用程序仍在任务管理器中列出(并且仍然有打开的资源)。我试图通过故意在后台工作线程中引入各种错误来重现这个问题,但我做不到。什么会导致线程和应用程序像这样继续运行,即使在主窗口关闭后(并且可能已调用PostQuitMessage)?如何确保应用程序始终正常关闭? 最佳答案 第一条规则是线程的主执行

windows - 一旦进程结束,进程句柄会发生什么?

如果我有一些已停止(终止或刚刚结束)的Windows进程的句柄:句柄(或者更好的是它背后的内存)是否会被另一个进程重新使用?或者从现在开始,GetExitCodeProcess()等方法会永远得到正确的结果吗?如果1.为真:GetExitCodeProcess()工作“多长时间”?如果2.为真:这是否意味着我可以通过启动/终止新进程来关闭操作系统,因为我创建了越来越多的句柄(并且操作系统为它们保留了内存)?我对句柄的概念有点困惑。提前致谢! 最佳答案 句柄间接指向一个内核对象。只要有打开的句柄,该对象就会保持事件状态。Willthe

java - JNA - 查询 Windows 进程

我正在尝试使用JNA返回特定Windows进程的详细信息。不确定如何执行此操作。在互联网上找不到太多帮助。我想返回的一些信息包括CPU和内存使用情况。下面只是我找到的一个例子。importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.DataInputStream;importjava.io.FileInputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStreamReader;importc

c++ - 如何捕获来自某些进程的所有 HTTP 请求?

我搜索过这个,我开始了解WinPCap,但我仍然没有得到我需要的答案。WinPCap可以监控数据包,并且似乎不跟踪进程(我对此了解不多)。我希望我的应用程序监听来自特定进程(通常来self稍后定义的浏览器)的每个HTTP请求,并在必要时修改它们。我的应用程序最初是用Delphi编写的,但使用C++的任何帮助也很棒。谁能帮我解决这个问题?编辑1:当然我不指望你一定要根据winPcap给我一个答案! 最佳答案 WinPCap允许您访问每个捕获数据包的源和目标IP/端口对。您可以迭代操作系统的TCP表(在Windows上,您可以使用Get

c++ - 如何使用 C++ 在 SYSTEM 进程中获取事件用户名?

我使用了GetUserName()方法,但它返回的用户名在SYSTEM进程中是“SYSTEM”。如何在SYSTEM进程中获取事件用户名?这是我的代码:voidgetComputerUsername(char*username,char*domainname){HANDLEhp,htoken;charbuff[1024];unsignedlongsize=1024;TOKEN_USER*tuser;PSIDsid;TCHAR*user=newTCHAR[256];TCHAR*domain=newTCHAR[256];SID_NAME_USEsnu;hp=htoken=INVALID_HA

windows - 限制批处理脚本中生成的进程数

我遇到的情况与thisquestion中描述的情况非常相似(但是是批处理的,不是shell)。我制作了一个简单的批处理脚本来遍历磁贴的行并使用python脚本从服务器下载数据(该过程本身比简单的下载更复杂,它必须使用API进行身份验证并获取多个URL)。第一个版本如下:for/F"tokens=*"%%Ain(client_name_list.txt)dopythondownload_metadata.py"%%A"它的方式是等到每次迭代完成后再继续,所以我将其更新为以下内容:for/F"tokens=*"%%Ain(client_name_list.txt)dostartcmd/Cp

c# - 如何从 C# 系统托盘应用程序将 C 程序作为线程运行?

我有一个C控制台应用程序,它曾经在Windows的CMD终端中的前台运行,并接受用户击键输入。但是,现在需要将其移至后台并且不需要用户输入。我已经创建了一个系统托盘,它是通过右键单击退出和右键单击关于来正确实现的。并有一个执行该功能的终端程序。我不想再次重写程序,而是希望能够创建一个线程来调用我现有程序中不需要终端的函数。只是为了强调这一点,控制台交互方面已从代码中删除,应用程序对击键的响应等也已从代码中删除。希望这能稍微澄清一些事情。问题:这可能吗?我将如何实现?(我通常不是使用更多嵌入式C的PC程序员,所以.NET对我来说很陌生。非常感谢任何帮助) 最佳

windows - 如何通过批处理或脚本文件判断进程是否正在运行?

这个问题在这里已经有了答案:Howtocheckifaprocessisrunningviaabatchscript(19个回答)关闭6年前。如何使用批处理文件判断特定进程是否正在运行?例如,如何判断notepad.exe是否正在运行?

c++ - 发现在我的 C++ 应用程序中创建线程的原因及其作用的最佳方法是什么?

我正在审核在Windows上运行的C++应用程序,该应用程序是针对多线程调试DLL编译的。它有很多可以产生线程的第三方依赖项。我需要跟踪每个线程存在的原因以及它分配了多少堆栈空间。有什么好方法可以追溯到线程创建的开始,以便我可以看到线程的生成位置?更新:我应该指出,我有整个应用程序的源代码,不依赖于Microsoft依赖项。然而,许多线程的调用堆栈仅存在于操作系统附带的库中,例如ntdll.dll和kernel32.dll。 最佳答案 您可以使用WindowsPerformanceToolkit查看ThreadCreate事件。在V

c++ - 在不创建新进程的情况下在另一个进程中运行可执行文件

我想编写一个程序来运行可执行镜像而不创建新进程...我想这样做是因为我想使用plink将密码发送到远程ssh服务器...plink程序发送命令行中提供的密码。如果我使用fork和exec函数,有人可以使用进程资源管理器或ps-aef或cat/proc//cmdline查看命令行中提供的密码。如何避免这个安全漏洞..而且这个程序必须在linux和windows上运行.. 最佳答案 将SSH服务器设置为使用RSA公钥/私钥身份验证而不是密码。一般来说,这通常是SSH的更好选择。参见http://www.google.com/search