天道酬勤,学无止境

process

多线程进程的线程 ID 可以与另一个正在运行的进程的进程 ID 相同吗?(Can the thread ID of a multithreaded process be the same as the process ID of another running process?)

问题 我试图找到一种方法来唯一标识多进程环境中的线程。 我有一个服务器来跟踪连接到它的不同进程,其中一些是多线程的,而另一些不是。 为了从多线程连接中识别线程,我使用线程 ID 作为唯一标识符(在任何给定时间最多连接 1 个多线程进程)。 我的问题是:这些线程之一的线程 ID 是否可能与系统上运行的另一个进程的进程 ID 相同? 在此先感谢您的帮助! 回答1 TID(由sys_gettid()系统调用返回sys_gettid()在系统1上的所有线程中是唯一的,并且对于单线程进程,PID 和 TID 是相等的。 这意味着 TID 永远不会与来自另一个进程的 PID 发生冲突。 1. 需要注意的是,如果使用 PID 命名空间,则 TID 和 PID 仅在同一个 PID 命名空间内是唯一的。 回答2 根据 pthreads 的手册页,线程 ID 在创建进程中是唯一的,所以是的,另一个线程或进程可以具有相同的 ID。 但是,如果它在进程中是唯一的,并且进程 ID 在系统中是唯一的,那么也许您可以使用两者的组合作为唯一标识符。 进程中的每个线程都有一个唯一的线程标识符(存储在类型 pthread_t 中)。 该标识符返回给 pthread_create(3) 的调用者,线程可以使用 pthread_self(3) 获取自己的线程标识符。 线程 ID 只能保证在进程中是唯一的。 回答3 虽然

2021-12-09 08:31:42    分类:技术分享    linux   multithreading   process   linux-kernel   pthreads

如何使用 Qt (C++) 检查程序是否按其名称运行(How to check if a program is running by its name with Qt (C++))

问题 如何使用 Qt (C++) 通过名称检查程序是否正在运行。 QProcess::pid完成这项工作吗? 我不知道如何使用它。 请建议。 回答1 据我所知 QProcess 不允许你这样做(除非你自己产生了这个过程)而且实际上 Qt 中没有任何东西。 但是,Win32 API 提供了一种通过EnumProcesses函数实现您想要的功能的方法,并且在 Microsoft 网站上提供了如何使用它的完整示例: http://msdn.microsoft.com/en-us/library/ms682623.aspx 为了让你需要用以下函数替换 PrintProcessNameAndID: bool matchProcessName( DWORD processID, std::string processName) { TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>"); // Get a handle to the process. HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); // Get the process name. if (NULL != hProcess ) {

2021-12-09 06:32:23    分类:技术分享    c++   qt   process   qt-creator   qprocess

如何将字节数组发送到 C++ 中的另一个进程(How to send a byte array to another process in C++)

问题 我一直在该站点上检查一种将数据从一个进程传输到另一个进程的 C++ 方法。 我找到了 SendMessage() 方法,但它似乎无法采用字节数组。 为了稍微解释一下这里的上下文,我有一个将数据发送到另一个应用程序的应用程序。 我们有几个具有不同 ID 的对象。 接收的应用程序为每个不同的对象创建一个选项卡。 如果接收数据的应用程序关闭,我们将启动一个新进程并将数据显示给用户。 如果我们第二次发送,我们需要检查 ID 以查看我们是否已经拥有其中一个对象,如果是,则替换它。 否则为新对象添加新选项卡。 我们使用来自 google 的协议缓冲区,它们使用字节数组进行传输和序列化,这就是为什么我需要找到一种方法将字节数组从一个进程发送到另一个进程。 我能够获得该过程的 HWND,但我不知道从现在开始该去哪里。 回答1 进程间通信是特定于平台的事情。 在 Windows 中,有很多方法可以做到这一点。 这篇 MSDN 文章描述了几种方法及其优缺点和用例: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx 当您控制这两个应用程序,并且您不关心对 3rd 方应用程序的支持时,那么通过 SendMessage() 将 WM_COPYDATA 消息发送到另一个进程可能是一个好方法。

2021-12-09 06:02:32    分类:技术分享    c++   windows   process   protocol-buffers

我如何使用 C# 创建窗口站和 Windows 桌面(how can i creating window station and windows desktop using c#)

问题 我想创建新的窗口站和 Windows 桌面并将我的进程附加到它。 我怎样才能做到这一点 我需要知道 创建窗口站并附加我的桌面有效地在桌面之间创建和切换我如何将进程附加到 winlogon 桌面(如果可能) 销毁创建的桌面并返回到 Windows 桌面 回答1 每个“会话”只有一个交互式窗口站,但您可以有多个会话。 http://blogs.technet.com/markrussinovich/archive/2010/02/24/3315174.aspx 我不知道直接创建登录会话的 API,但如果您使用的是 Windows Server 版本,您可以使用远程桌面创建本地会话,在那里自动运行您的程序,然后在程序结束后再次注销(程序您正在远程桌面会话中运行,完成后可能会注销)。 下面的代码将使用 MSTSC ActiveX 控件以编程方式创建 RDP 会话。 您需要手动生成 ActiveX 存根并将它们添加到您的项目中。 从 Visual Studio 命令提示符键入以下内容: aximp.exe %windir%\system32\mstscax.dll 将生成的文件(MSTSCLib.dll 和 AxMSTSCLib.dll)复制到项目目录。 将这两个文件添加到项目引用中。 使用系统; 使用 System.Collections.Generic; 使用 System

2021-12-09 06:01:21    分类:技术分享    c#   windows   process   desktop

将外部 EXE 设置为 TopMost(Set an external EXE as TopMost)

问题 您将如何使用 Process.Start 或类似方法将程序设置为最顶层的应用程序 任何帮助,将不胜感激! 回答1 启动进程后,我将首先获取该进程的窗口句柄 然后,我会使用 SetWindowPos 将其设置为最顶层 请注意,这需要使用 PInvoke。 这 3 个链接应该指向正确的方向。

2021-12-09 04:23:32    分类:技术分享    c#   process

YUI 压缩器和 .NET 应用程序(YUI Compressor and .NET Apps)

问题 我想使用 YUI Compressor(原版)并将其用作典型 MS 构建过程(Visual Studio 2008、MSBuild)的一部分。 有没有人对此有任何指导或想法? 例如,合并到项目中的好方法,如何处理现有的 CSS 和 JS 引用等。 我很高兴听到 YUI Compressor .NET 和替代品的好处,但我对使用原版更感兴趣。 谢谢斯科特 回答1 我两个都用。 YUI 压缩器是命令行的,易于集成到任何构建过程中。 我让它在耙子中运行,没有任何问题。 在部署时就地执行 javascript/css 压缩可能是最常见的。 这样你就不必更新 JS 引用。 但我在我的网站上使用另一种方法。 我将压缩文件创建为*-min.js等。要在我的页面上包含脚本或 css 文件,我调用了服务器端方法: <%= ScriptSrc("~/assets/myscript.js") %> <%= LinkSrc("~/assets/main.css") %> 这些方法执行以下操作: 展开应用相对路径在末尾添加一个版本字符串(用于缓存失效) 根据我们是否处于调试模式,在完整脚本和缩小版本之间进行选择。 在调试模式下, ScriptSrc可能会输出如下内容: <script type="text/javascript" src="http://stage.myapp.com/assets

2021-12-09 03:59:14    分类:技术分享    .net   optimization   process   build

杀死已经用 popen2 创建的进程(Killing process that has been created with popen2)

问题 我正在使用 popen2 函数(已在 stackoverflow 的其他地方推荐)以编程方式创建一个必须在一段时间后再次终止的进程。 popen2 返回一个 PID,我认为这个 PID 可用于终止进程。 但是,它不是这样工作的。 为了杀死它,我必须增加返回的PID,我不明白(见下面的代码) 当多个线程并行执行此操作时,可能会出现另一个问题。 在那种情况下,我认为由于竞争条件,PID 的差异可能不止一个。 所以我的问题是:如何在多线程场景中可靠地识别 popen2 创建的进程的 PID? #include <sys/types.h> #include <fcntl.h> #include <unistd.h> #include <signal.h> #define READ 0 #define WRITE 1 pid_t popen2(const char *command, int *infp, int *outfp) { int p_stdin[2], p_stdout[2]; pid_t pid; if (pipe(p_stdin) != 0 || pipe(p_stdout) != 0) return -1; pid = fork(); if (pid < 0) return pid; else if (pid == 0) { close(p_stdin[WRITE])

2021-12-09 03:34:26    分类:技术分享    c   process   exec   popen

计算 Windows 中特定进程的上下文切换(Counting Context Switches for Specific Process in Windows)

问题 我想做的是编写一个小程序,该程序连续实时计算特定进程在每足够小的时间单位内经历的上下文切换次数。 我在“Process Explorer”软件中观察到了这个功能,所以我知道这绝对是可能的。 不幸的是,我对如何开始编码这一点知之甚少,到目前为止还无法在网上找到任何有用的代码片段。 因此,一个实现每进程和每单位时间实时上下文切换计数的小型工作示例对我来说非常有帮助。 回答1 这是一种方法 - 这将每秒打印记事本的线程 0 使用的上下文切换数量(您可以在 CounterPathBuffer 初始化中替换您想要的任何进程和线程号): #include "stdafx.h" #include <iostream> #include <windows.h> #include <stdio.h> #include <conio.h> #include <pdh.h> #include <pdhmsg.h> #pragma comment(lib, "pdh.lib") using namespace std; CONST ULONG SAMPLE_INTERVAL_MS = 1000; CONST PWSTR BROWSE_DIALOG_CAPTION = L"Select a counter to monitor."; void wmain(void) { PDH_STATUS

2021-12-09 03:06:08    分类:技术分享    c#   c++   windows   process   cpu

将 Java 程序运行到另一个程序中 [重复](Run Java program into another Program [duplicate])

问题 这个问题在这里已经有了答案: 8 年前关闭。 可能的重复: 在java程序中执行另一个jar 我尝试从另一个 java 应用程序中运行带有 java 应用程序的 jar 文件,但我无法让它工作。 我的代码在下面 // run Jar in other java application Runtime run=Runtime.getRuntime(); run.exec("java -jar ManichemManagerRotas BatchProcess 8 2012"); 我尝试使用三个参数运行manichemmanagerrotas.jar 。 所有方法我都可以做到但它仍然无法工作问题是无法运行 jar 文件的主要方法类如果您对这个问题有任何想法,请给我重播这对我来说很重要 我尝试运行 jar 文件然后错误是:无法访问 jarfile ManichemManagerRotas 回答1 尝试添加缺少的.jar : Runtime run=Runtime.getRuntime(); run.exec("java -jar ManichemManagerRotas.jar BatchProcess 8 2012"); ...你必须消耗进程输出......像这样: InputStream in = run.getInputStream(); InputStream err =

2021-12-08 23:56:44    分类:技术分享    java   eclipse   process   runtime.exec

从另一个进程的输出流中读取(Read from another process' output stream)

问题 我想在我的 Java 程序中读取 c-Application 的输出流。 iremoted (可在此处获得:http: //osxbook.com/software/iremoted/download/iremoted.c )是一个 C 应用程序,如果按下我的 Apple Remote 上的按钮,它会显示“0x19pressed”等单独的行。 如果我启动远程程序,一切都很好,每次按下按钮时,屏幕上都会显示这些单独的行。 现在我想在我的 Java 应用程序中读取 c 应用程序的输出流,以处理 Java 项目中 Apple Remote 的输入。 不幸的是,我不知道为什么没有输入被重新识别? 我用一个简单的 HelloWorld.c 程序尝试了它,我的程序在这种情况下按预期响应(打印出 HelloWorld)。 为什么它不适用于远程程序? public class RemoteListener { public void listen(String command) throws IOException { String line; Process process = null; try { process = Runtime.getRuntime().exec(command); } catch (Exception e) { System.err.println("Could

2021-12-08 22:24:50    分类:技术分享    java   process   stream