精华内容
下载资源
问答
  • windows进程怎么打开
    万次阅读
    2011-12-11 18:21:21

    在linux系统中,进程打开的文件句柄数量的限制,可用ulimit命令来查看和修改,或者修改/etc/security/limits.conf也可以修改。但在windows中,目前没有找到方便的方法查看这个值。

    下面这段代码可以用来查看该值,设置的办法还没有找到。

    Windows server 2003下面程序的值是509,加上标准I/O和标准错误文件句柄,系统这个值应该是512。其他的windows系统如果需要可以用跑一下下面的代码试一下。

     

    int _tmain(int argc, _TCHAR* argv[])

    {

         FILE   *p;

        p=fopen("E:\\first.txt","rb");

         if(p==NULL)

        {

            printf("\nerror on open E:\\first.txt file!");

        }

     

        int i = 1;

        while(p!=NULL)

        {

            p=fopen( "E:\\first.txt", "rb");

             printf("%d\n",i);

             i++;

        }

         return 0;

    }


    更多相关内容
  • 我使用了一个股票网站服务器提供的API接口,向该网站API发送指令后,服务器会与我的电脑建立UDP连接,同时在...同时我也没在windows7的进程管理中找出是哪个进程在我的电脑里写入文件。 请问有什么办法能解决该问题?
  • windows守护进程

    千次阅读 2021-01-12 17:04:03
    1、windows没有fork函数,无法创建僵尸进程,使用打开非子进程的方式打开外部进程---打开外部进程 2、守护进程应该是单例的进程---》单例进程 3、守护进程应该是存在一个子线程不断的判断是否存在守护目标,若不...

    一、逻辑分析

    1、windows没有fork函数,无法创建僵尸进程,使用打开非子进程的方式打开外部进程---打开外部进程

    2、守护进程应该是单例的进程---》单例进程

    3、守护进程应该是存在一个子线程不断的判断是否存在守护目标,若不存在(异常退出)则启动守护目标

    4、当守护目标正常退出时,需要关闭守护进程

    (1)、直接kill掉守护进程(守护进程没有做成病毒进程(系统进程)---记录下这里没找到方法)

    (2)、进程间通讯实现关闭守护进程---有很多的方法博主使用的是命名管道

    二、守护线程

    #pragma once
    
    #include <QThread>
    
    class HiDaemon : public QThread
    {
    	Q_OBJECT
    public:
    	HiDaemon(QObject *parent = nullptr);
    	~HiDaemon();
    
    public slots:
    	void start();
    	void stop();
    
    private:
    	void run();
    
    private:
    	volatile bool			m_bRunning;
    
    	QString					m_strFilePath;
    	QString					m_strProducerName;
    };
    
    #include "HiDaemon.h"
    #include <windows.h>
    #include "tlhelp32.h"
    #include "tchar.h"
    #include "HiDaemonDef.h"
    #include "HiUtils.h"
    #include <QMessageBox>
    
    HiDaemon::HiDaemon(QObject *parent)
    	: QThread(parent)
    	, m_bRunning(false)
    	, m_strProducerName("")  // 这里自定义默认值
    {
    	m_strFilePath = QApplication::applicationDirPath();
    
    	QStringList strList = QApplication::arguments();
    	if (strList.size() > 1)
    	{
    		m_strProducerName = strList.at(1);
    	}
    }
    
    HiDaemon::~HiDaemon()
    {
    }
    
    void HiDaemon::start()
    {
    	if (m_bRunning)
    	{
    		return;
    	}
    	m_bRunning = true;
    
    	QThread::start();
    }
    
    void HiDaemon::stop()
    {
    	m_bRunning = false;
    	wait(1000);
    }
    
    void HiDaemon::run()
    {
    	STARTUPINFOA si;
    	//进程对象
    	PROCESS_INFORMATION pi;
    	//初始化 
    	ZeroMemory(&si, sizeof(si));
    	si.cb = sizeof(si);
    	ZeroMemory(&pi, sizeof(pi));
    
    	//构造cmd执行守护进程的字符串
    	char pCmd[MAX_PATH_NUM] = { 0 };
    
    	{
    		QFileInfo file(m_strFilePath + QDir::separator() + m_strProducerName);
    
    		QString strFilePath = file.filePath();
    		strcat_s(pCmd, strFilePath.toStdString().c_str());
    	}
    	
    	while (m_bRunning)
    	{
    		//检查守护程序是否存在
    		pi.hProcess = GetProcessHandleByName(m_strProducerName);
    
    		if (pi.hProcess == nullptr)
    		{
    			// 创建子进程,判断是否执行成功
    			if (CreateProcessA(NULL, pCmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    			{
    				// 创建失败
    			}
    		}
    
    		if (pi.hProcess != nullptr)
    		{
    			//无限等待子进程退出
    			WaitForSingleObject(pi.hProcess, INFINITE);
    			CloseHandle(pi.hProcess);
    			CloseHandle(pi.hThread);
    		}
    		
    
    		Sleep(100);
    	}
    }
    

    二、命名管道实时通讯

    #pragma once
    #include <windows.h>
    #include <QThread>
    
    //
    //HANDLE CreateNamedPipe(
    //	LPCTSTR lpName,								// pipe name
    //	DWORD dwOpenMode,							// pipe open mode
    //	DWORD dwPipeMode,							// pipe-specific modes
    //	DWORD nMaxInstances,						// maximum number of instances
    //	DWORD nOutBufferSize,						// output buffer size
    //	DWORD nInBufferSize,						// input buffer size
    //	DWORD nDefaultTimeOut,						// time-out interval
    //	LPSECURITY_ATTRIBUTES lpSecurityAttributes  // SD
    //  );
    //
    
    class HiNamePipeServer : public QThread
    {
    	Q_OBJECT
    public:
    	HiNamePipeServer(QObject *parent = nullptr);
    	~HiNamePipeServer();
    
    	void start();
    	void stop();
    
    private slots:
    	void onParse();
    
    private:
    	void creatPipe();
    	void run();
    
    signals:
    	void parse();
    	void stopDaemon();
    
    private:
    	HANDLE						 m_pHandle;
    	HANDLE						 m_pEvent;
    	volatile bool				 m_bRunning;
    	char						 m_readbuffer[100];
    	DWORD						 m_readLenth;
    	bool						 m_resetStarted;
    	QString						 m_strFilePath;
    	QString						 m_strProducerName;
    };
    #include "HiNamePipeServer.h"
    #include <windows.h>
    #include <QDebug>
    #include "HiDaemonDef.h"
    #include "HiUtils.h"
    HiNamePipeServer::HiNamePipeServer(QObject *parent)
    	: QThread(parent)
    	, m_bRunning(false)
    	, m_pHandle(nullptr)
    	, m_resetStarted(false)
    {
    	creatPipe();
    	connect(this, &HiNamePipeServer::parse, this, &HiNamePipeServer::onParse, Qt::DirectConnection);
    	m_strFilePath = QApplication::applicationDirPath();
    
    	QStringList strList = QApplication::arguments();
    	if (strList.size() > 1)
    	{
    		m_strProducerName = strList.at(1);
    	}
    }
    
    HiNamePipeServer::~HiNamePipeServer()
    {
    	if (m_pHandle)
    	{
    		CloseHandle(m_pHandle);
    	}
    	CloseHandle(m_pEvent);
    }
    
    void HiNamePipeServer::start()
    {
    	if (m_bRunning)
    	{
    		return;
    	}
    	m_bRunning = true;
    	QThread::start();
    }
    
    void HiNamePipeServer::stop()
    {
    	m_bRunning = false;
    }
    
    void HiNamePipeServer::onParse()
    {
    	QString strMsg = m_readbuffer;
    
    	QStringList paramList = strMsg.split(WRITE_SPACER);
    	if (paramList.size() != 2)
    	{
    		return;
    	}
    	
    	PipeWriteType writeType = PipeWriteType(paramList.at(0).toInt());
    
    	switch (writeType)
    	{
    	case PipeWriteType_ClientExit:
    	{
    		emit stopDaemon();
    		qApp->quit();
    		break;
    	}
    	case PipeWriteType_ClinetRestart:
    	{
    		if (m_resetStarted == false)
    		{
    			m_resetStarted = true;
    			KillProcess(m_strProducerName);
    		}
    		break;
    	}
    	default:
    		break;
    	}
    
    }
    
    void HiNamePipeServer::creatPipe()
    {
    	m_pHandle = CreateNamedPipe(PIPE_NAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE, PIPE_MAXINSTANCES, 0, 0, 1000, NULL);
    	if (INVALID_HANDLE_VALUE == m_pHandle)
    	{
    		CloseHandle(m_pHandle);
    		// 创建管道失败
    		m_pHandle = nullptr;
    	}
    }
    
    void HiNamePipeServer::run()
    {
    	// 这里暂时同步调用,可以考虑使用异步设置超时事件
    	while (m_bRunning)
    	{
    		OVERLAPPED  ovlap;
    		ZeroMemory(&ovlap, sizeof(OVERLAPPED));
    		//2. 创建管道连接
    		if (!ConnectNamedPipe(m_pHandle, &ovlap))
    		{
    			if (ERROR_IO_PENDING != GetLastError())
    			{
    				Sleep(100);
    				continue;
    			}
    		}
    
    		// 这个等待可能非常的久
    		if (ReadFile(m_pHandle, m_readbuffer, 100, &m_readLenth, NULL) == TRUE)
    		{
    			emit parse();
    		}
    		DisconnectNamedPipe(m_pHandle);
    	}
    }
    

    管道读取线程是阻塞的

    三、主函数

    #include <stdio.h>
    #include <stdlib.h>
    #include <io.h>
    #include <iostream>
    #include <string>
    #include <QString>
    #include <QApplication>
    #include "HiNamePipeServer.h"
    #include "HiDaemon.h"
    #include <QObject>
    #include "HiSingleApplication.h"
    
    LPCTSTR szAppClassName = TEXT("HiDaemon");
    LPCTSTR szAppWindowName = TEXT("HiDaemon");
    
    
    // HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);
    // ::TerminateProcess(hProcess, 0);
    // CloseHandle(hProcess);
    
    using namespace std;
    
    // 隐藏DOS黑窗口
    #ifdef _MSC_VER
    #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
    #endif
    
    int main(int argc, char* argv[])
    {
    	HiSingleApplication a(argc, argv);
    	// 这里应该传入的产品类型,不同的产品,启动后可能动作不一致
    	QCoreApplication::setOrganizationName("EnlightV");
    	QCoreApplication::setApplicationName("HiDaemon");
    	if (a.isRunning())
    	{
    		return 0;
    	}
    
    	HiDaemon *daemon = new HiDaemon;
    	HiNamePipeServer *server = new HiNamePipeServer;
    
    	QObject::connect(server, &HiNamePipeServer::stopDaemon, daemon, &HiDaemon::stop, Qt::DirectConnection);
    
    	daemon->start();
    	server->start();
    
    	a.exec();
    
    	return 0;
    }

    四、应用程序启动守护进程

    // 获取守护进程句柄
    HANDLE GetProcessHandleByName(const QString &name)
    {
    	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    	if (INVALID_HANDLE_VALUE == hSnapshot)
    	{
    		return NULL;
    	}
    	PROCESSENTRY32 pe = { sizeof(pe) };
    	BOOL fOk;
    	for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe))
    	{
    		if (QString::fromWCharArray(pe.szExeFile) == name)
    		{
    			CloseHandle(hSnapshot);
    			return GetProcessHandle(pe.th32ProcessID);
    		}
    	}
    	return NULL;
    }
    
    //tempPath 是自定义的一个可写目录
    void StartDaemon(const QString &tempPath)
    {
    	// 1、检测守护进程是否已经启动了
    	if (GetProcessHandleByName(DAEMON_NAME) != nullptr)
    	{
    		return;
    	}
    
    	QString batFile = tempPath + QDir::separator() + "StartDaemon.bat";
    	if (QFile(batFile).exists())
    	{
    		QFile(batFile).remove();
    	}
    
    	QFile file(batFile);
    	if (file.open(QFile::ReadWrite))
    	{
    		QString strParam = QString("@echo off \n start /d  \"%1\" HiDaemond.exe  \"%2\" \n exit").arg(QCoreApplication::applicationDirPath()).arg(QFileInfo(QCoreApplication::applicationFilePath()).fileName());
    		file.write(strParam.toLocal8Bit());
    		file.close();
    
    		QProcess p;
    		p.start("cmd.exe", QStringList() << "/c" << batFile);
    		if (p.waitForStarted())
    		{
    			p.waitForFinished(2000);
    			return;
    		}
    	}
    	else
    	{
    		QString strAppPath = QApplication::applicationDirPath();
    		QStringList arguments;
    		{
    			QFileInfo file(QApplication::applicationFilePath());
    			arguments.append(file.fileName());
    		}
    		QFileInfo deamonFile(strAppPath + QDir::separator() + DAEMON_NAME);
    		if (deamonFile.exists())
    		{
    			std::wstring operate = QString("runas").toStdWString();//临时提升管理员权限
    			std::wstring path = QCoreApplication::applicationDirPath().toStdWString();
    			std::wstring appName = QFileInfo(QCoreApplication::applicationFilePath()).fileName().toStdWString();;
    			std::wstring file = deamonFile.filePath().toStdWString();
    			int ret = (int)ShellExecute(NULL, operate.c_str(), file.c_str(), appName.c_str(), path.c_str(), SW_SHOWNORMAL);
    		}
    
    	}
    }
    

    五、主端关闭时候,通讯给守护进程自行关闭

    #pragma once
    
    #include <windows.h>
    
    class HiNamePipeClient
    {
    public:
    	static HiNamePipeClient* getInstance();
    	void writeFile(PipeWriteType type,  const QString & param = QString());
    
    protected:
    	HiNamePipeClient();
    	~HiNamePipeClient();
    
    private:
    	bool openPipe();
    
    private:
    	HANDLE  m_pHandle;
    };
    
    inline HiNamePipeClient *pipeClient()
    {
    	return HiNamePipeClient::getInstance();
    }
    #include "HiNamePipeClient.h"
    #include "guard.h"
    
    enum PipeWriteType
    {
    	PipeWriteType_ClientExit = 0,							// 客户端正常退出
    	PipeWriteType_ClinetRestart,							// 客户端重启
    };
    
    HiNamePipeClient* HiNamePipeClient::getInstance()
    {
    	static HiNamePipeClient instance;
    	return &instance;
    }
    
    void HiNamePipeClient::writeFile(PipeWriteType type, const QString & param)
    {
    #if HIRENDER_C_SERIES
    	if (openPipe())
    	{
    		DWORD dwWriteLen = 0;
    		QString strParam = QString("%1#%2").arg((int)type).arg(param);
    		if (WriteFile(m_pHandle, strParam.toStdString().c_str(), strParam.length(), &dwWriteLen, NULL))
    		{
    			// 写入成功
    		}
    		CloseHandle(m_pHandle);
    		m_pHandle = nullptr;	
    	}
    	Sleep(200);
    #endif
    }
    
    HiNamePipeClient::HiNamePipeClient()
    	: m_pHandle(nullptr)
    {
    
    }
    
    HiNamePipeClient::~HiNamePipeClient()
    {
    
    }
    
    bool HiNamePipeClient::openPipe()
    {
    	if (m_pHandle)
    	{
    		CloseHandle(m_pHandle);
    	}
    	if (!WaitNamedPipe(PIPE_NAME, PIPE_TIMEOUT))
    	{
    		// 当前没有可利用的命名管道实例!
    		return false;
    	}
    
    	m_pHandle = CreateFile(PIPE_NAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    	if (INVALID_HANDLE_VALUE == m_pHandle)
    	{
    		// "打开命名管道失败!
    		m_pHandle = NULL;
    		return false;
    	}
    	return true;
    }
    

    六、强制关闭守护进程(提供方法、博主程序中未使用)

    
    bool KillProcess(QString ProcessName)
    {
    	QProcess p;
    	QString c = "taskkill /im " + ProcessName + " /f";    //exeFileName为要杀死的进程名
    	p.execute(c);
    	p.close();
    	return true;
    }

     

    展开全文
  • 操作系统课设之Windows 进程管理

    千次阅读 多人点赞 2021-06-28 17:15:27
    操作系统课程设计 Windows进程管理 C创建进程

    前言

    课程设计开始了,实验很有意思,写博客总结学到的知识
    白嫖容易,创作不易,学到东西才是真
    本文原创,创作不易,转载请注明!!!
    本文链接
    个人博客:https://ronglin.fun/archives/171
    PDF链接:见博客网站
    CSDN: https://blog.csdn.net/RongLin02/article/details/118308142

    为了美观,实验源代码在结尾处,整合版见下
    链接:https://pan.baidu.com/s/1rXj1QJGuw-BVc5sQWret9w
    提取码:Lin2
    操作系统课程设计源代码
    本次操作系统课程设计合集
    操作系统课设之Windows 进程管理
    操作系统课设之Linux 进程管理
    操作系统课设之Linux 进程间通信
    操作系统课设之Windows 的互斥与同步
    操作系统课设之内存管理
    操作系统课设之虚拟内存页面置换算法的模拟与实现
    操作系统课设之基于信号量机制的并发程序设计
    操作系统课设之简单 shell 命令行解释器的设计与实现
    仅用于学习,如有侵权,请联系我删除

    实验题目

    Windows 进程管理

    实验目的

    (1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序)。
    (2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操
    作系统的进程概念,理解 Windows 进程的“一生”。
    (3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。

    实验内容

    由于个人习惯,对于C/C++代码,我更喜欢用CodeBlocks开发,所以本次验证性实验和设计类均用CodeBlocks完成。

    1-1 编写基本的 Win32 Consol Application

    这个实验的主要目的是熟悉编写C/C++控制台程序,对于创建一个C/C++控制台程序,我常用的有两种方式,逐一说明其优缺点。
    第一种方式是在菜单栏点击 File – New – File… ,在弹出的窗口中选择 C/C++ source ,然后选择代码类型是C还是C++,之后设置文件保存的位置,然后就会生成一个.c(.cpp)文件,在这个文件中就可以编写c(c++)代码了。编写完成后在菜单栏 点击 Build – Build and run 或者直接按F9,即可查看输出。这种方法创建C/C++控制台程序,优点是轻便,文件最后只生成三个,源代码.c文件,.o文件还有exe文件,缺点是不支持调试。适合轻量级开发
    第二种方法是新建一个工程,在菜单栏点击 File – New – Project…,弹出的界面选择 Console Application ,然后选择代码类型和文件保存目录,之后它会生成一个该项目的文件夹,然后有一个main.c(main.cpp)文件,在这个文件中编写代码。这个项目中的核心文件是.cbp,还会生成很多从属文件,优点是调试方便,可以用Debug单步调试,缺点是生成文件多,适合大型项目开发。
    本次操作系统课程设计均是用第二种方式生成C++项目编写。

    1-2 创建进程

    1.创建一个C++项目,将指导书中的1-2代码复制到main.cpp文件中,然后编译运行
    2.按照代码中的注释提示修改代码,看有什么不同,共有两处修改
    3.通过查阅相关资料分析为何会出现这样的结果

    关键代码

        BOOL bCreateOK=::CreateProcess(
                           szFilename, // 产生这个 EXE 的应用程序的名称
                           szCmdLine, // 告诉其行为像一个子进程的标志
                           NULL, // 缺省的进程安全性
                           NULL, // 缺省的线程安全性
                           FALSE, // 不继承句柄
                           CREATE_NEW_CONSOLE, // 使用新的控制台
                           NULL, // 新的环境
                           NULL, // 当前目录
                           &si, // 启动信息
                           &pi) ; // 返回的进程信息
    

    1-3 父子进程的简单通信及终止进程

    1.创建一个C++项目,将指导书中的1-3代码复制到main.cpp文件中,然后按F9查看运行结果
    2.根据注释修改代码,查看结果
    3.查阅资料,分析原因

    关键代码

    // 决定其行为是父进程还是子进程
        if (argc>1 && :: strcmp(argv[1], "child" ) == 0)
        {
            Child() ;
        }
        else
        {
            Parent() ;
        }
    

    实验结果与分析

    1-1 编写基本的 Win32 Consol Application

    运行结果:
    在这里插入图片描述
    return是返回值,如果越界就会返回一个数,后边execution time 是 C/C++控制台程序执行的时间。

    1-2 创建进程

    不修改的运行结果
    在这里插入图片描述
    会生成5个子进程,且0号进程结束后其余进程不消失
    第一次修改
    nClone=0;
    结果和原代码一样
    第二次修改

    if (argc > 1)
     {
    // 从第二个参数中提取克隆 ID
            :: sscanf(argv[1], "%d", &nClone) ;
    }
    //第二次修改:nClone=0;
    nClone = 0;
    

    在这里插入图片描述
    结果无限生成子进程。

    结果分析:
    生成子进程的过程是父进程生成一个子进程,然后子进程再“克隆”自己生成一个子进程,如此反复,直到到达代码中规定的 const int c_nCloneMax=5;为止。
    在这里插入图片描述
    重点在于这三句代码,当父进程生成子进程的时候,会给子进程传递参数,传参的内容就是 代码中的 szCmdLine 字符串,例如0号主进程会给子进程传递2个参数,第一个参数是 szFilename 是从主进程信息中获取,第二个参数就是 nClone,用来控制生成的克隆数量。
    分析两次修改
    第一次修改是在

    if (argc > 1)
    { :: sscanf(argv[1], "%d", &nClone) ;}
    

    之前,执行nClone=0;将nClone的量置为0,但是之后会判断参数数量,如果传进来大于一个参数,就会把传进来的第二个参数赋值给nClone,也就说子进程的nClone最后的值是它的父进程传进来的值,第一次修改的nClone=0;会被sscanf()覆盖掉。
    而第二次修改则是在if判断之后,if判断中将父进程传进来的参数赋值给nClone,然后第二次修改则会覆盖掉if中的赋值,将nClone置为0,所以说,nClone的值最后就是0,比较nClone < c_nCloneMax会恒成立,然后就会无限生成子进程,同时子进程的nClone参数永远都是1

    1-3 父子进程的简单通信及终止进程

    在这里插入图片描述
    然后在父进程中输入回车,主进程结束,同时子进程也消失。
    修改代码
    修改代码之后,子进程不出现,只有主进程
    结果分析:
    修改了WaitForSingleObject(hMutexSuicide,INFINITE) ;这句代码的第二个参数,将INFINITE改成了0,WaitForSingleObject()函数的第二参数是等待时间,如果超过这个时间(ms),不管互斥体是否可用都继续运行。而INFINITE在C++表示的意思是正无穷,实际上是一个宏定义 #define INFINITE 0xFFFFFFFF,意思是表示一个非常大的数,所以子程序会一直等互斥体可用,然后再结束。
    第二次修改
    在这里插入图片描述
    这个步骤原理和1-2类似,都是识别命令行参数,不再赘述

    小结与心得体会

    本验证性实验熟悉了CreateProcess()函数的大概用法,同时理解了控制台程序传参的过程。通过简单的修改nClone的值,实现完全不同的效果,同时再次认识到代码设计过程中,要多多注意逻辑错误.同时了解了互斥程序体的使用,利用WaitForSingleObject()和ReleaseMutex()实现互斥操作。收获良多。=w=

    源代码

    1-1 编写基本的 Win32 Consol Application

    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout << "Hello, Win32 Consol Application" << endl;
        return 0;
    }
    
    

    1-2 创建进程

    #include <windows.h>
    #include <iostream>
    #include <cstdio>
    // 创建传递过来的进程的克隆过程并赋于其 ID 值
    void StartClone(int nCloneID)
    {
    // 提取用于当前可执行文件的文件名
        TCHAR szFilename[MAX_PATH] ; /*字符串类型*/
    
    //第一个参数为句柄,NULL则指向当前程序。第二个参数用于存放地址的指针,第三个参数,系统自带的宏定义。不用管.
        GetModuleFileName(NULL, szFilename, MAX_PATH);
    // 格式化用于子进程的命令行并通知其 EXE 文件名和克隆 ID
        TCHAR szCmdLine[MAX_PATH];
        sprintf(szCmdLine,"\"%s\" %d",szFilename,nCloneID);
    // 用于子进程的 STARTUPINFO 结构
        STARTUPINFO si;
        ZeroMemory(&si, sizeof(si) ) ; /*用0填充*/
        /*包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段,应用程序必须将cb初始化为sizeof(STARTUPINFO)*/
        si.cb = sizeof(si) ; // 必须是本结构的大小5
    // 返回的用于子进程的进程信息
        PROCESS_INFORMATION pi;
    // 利用同样的可执行文件和命令行创建进程,并赋于其子进程的性质
        BOOL bCreateOK=::CreateProcess(
                           szFilename, // 产生这个 EXE 的应用程序的名称
                           szCmdLine, // 告诉其行为像一个子进程的标志
                           NULL, // 缺省的进程安全性
                           NULL, // 缺省的线程安全性
                           FALSE, // 不继承句柄
                           CREATE_NEW_CONSOLE, // 使用新的控制台
                           NULL, // 新的环境
                           NULL, // 当前目录
                           &si, // 启动信息
                           &pi) ; // 返回的进程信息
    // 对子进程释放引用
        if (bCreateOK)
        {
            /*关闭一个内核对象*/
            CloseHandle(pi.hProcess) ;
            CloseHandle(pi.hThread) ;
        }
    }
    int main(int argc, char* argv[] )
    {
    // 确定派生出几个进程,及派生进程在进程列表中的位置
        int nClone=0;
    //修改语句:int nClone;
    //第一次修改:nClone=0;
        //nClone=0;
        if (argc > 1)
        {
    // 从第二个参数中提取克隆 ID
            :: sscanf(argv[1], "%d", &nClone) ;
        }
    //第二次修改:nClone=0;
    /*此处修改无限生成子进程*/
        //nClone = 0;
    // 显示进程位置
        std :: cout << "Process ID:" << :: GetCurrentProcessId()
                    << ", Clone ID:" << nClone
                    << std :: endl;
    // 检查是否有创建子进程的需要
        const int c_nCloneMax=5;
        if (nClone < c_nCloneMax)
        {
    // 发送新进程的命令行和克隆号
            StartClone(++nClone) ;
        }
    // 等待响应键盘输入结束进程
        getchar();
    
        return 0;
    }
    
    

    1-3 父子进程的简单通信及终止进程

    # include <windows.h>
    # include <iostream>
    # include <cstdio>
    static LPCTSTR g_szMutexName = "w2kdg.ProcTerm.mutex.Suicide" ;
    // 创建当前进程的克隆进程的简单方法
    void StartClone()
    {
    // 提取当前可执行文件的文件名
        TCHAR szFilename[MAX_PATH] ;
        GetModuleFileName(NULL, szFilename, MAX_PATH) ;
    // 格式化用于子进程的命令行,字符串“child”将作为形参传递给子进程的 main 函数
        TCHAR szCmdLine[MAX_PATH] ;
    //实验 1-3 步骤 3:将下句中的字符串 child 改为别的字符串,重新编译执行,执行前请先保存已经
        //完成的工作
        sprintf(szCmdLine, "\"%s\" child", szFilename) ;
    // 子进程的启动信息结构
        STARTUPINFO si;
        ZeroMemory(&si,sizeof(si)) ;
        si.cb = sizeof(si) ; // 应当是此结构的大小
    // 返回的用于子进程的进程信息
        PROCESS_INFORMATION pi;
    // 用同样的可执行文件名和命令行创建进程,并指明它是一个子进程
        BOOL bCreateOK=CreateProcess(
                           szFilename, // 产生的应用程序的名称 (本 EXE 文件)
                           szCmdLine, // 告诉我们这是一个子进程的标志
                           NULL, // 用于进程的缺省的安全性
                           NULL, // 用于线程的缺省安全性
                           FALSE, // 不继承句柄
                           CREATE_NEW_CONSOLE, //创建新窗口
                           NULL, // 新环境
                           NULL, // 当前目录
                           &si, // 启动信息结构
                           &pi ) ; // 返回的进程信息
    // 释放指向子进程的引用
        if (bCreateOK)
        {
            CloseHandle(pi.hProcess) ;
            CloseHandle(pi.hThread) ;
        }
    }
    void Parent()
    {
    // 创建“自杀”互斥程序体
        HANDLE hMutexSuicide=CreateMutex(
                                 NULL, // 缺省的安全性
                                 TRUE, // 最初拥有的7
                                 g_szMutexName) ; // 互斥体名称
        if (hMutexSuicide != NULL)
        {
    // 创建子进程
            std :: cout << "Creating the child process." << std :: endl;
            StartClone() ;
    // 指令子进程“杀”掉自身
            std :: cout << "Telling the child process to quit. "<< std :: endl;
    //等待父进程的键盘响应
            getchar() ;
    //释放互斥体的所有权,这个信号会发送给子进程的 WaitForSingleObject 过程
            ReleaseMutex(hMutexSuicide) ;
    // 消除句柄
            CloseHandle(hMutexSuicide) ;
        }
    }
    void Child()
    {
    // 打开“自杀”互斥体
        HANDLE hMutexSuicide = OpenMutex(
                                   SYNCHRONIZE, // 打开用于同步
                                   FALSE, // 不需要向下传递
                                   g_szMutexName) ; // 名称
        if (hMutexSuicide != NULL)
        {
    // 报告我们正在等待指令
            std :: cout <<"Child waiting for suicide instructions. " << std :: endl;
    
    //子进程进入阻塞状态,等待父进程通过互斥体发来的信号
            /*INFINITE表示最大,参数表为对象句柄和毫秒数*/
            WaitForSingleObject(hMutexSuicide,INFINITE) ;
            //WaitForSingleObject(hMutexSuicide,0);
            //WaitForSingleObject(hMutexSuicide,5000);
    //实验 1-3 步骤 4:将上句改为 WaitForSingleObject(hMutexSuicide, 0) ,重新编译执行
    // 准备好终止,清除句柄
            std :: cout << "Child quiting." << std :: endl;
            CloseHandle(hMutexSuicide) ;
        }
    }
    int main(int argc, char* argv[] )
    {
    // 决定其行为是父进程还是子进程
        if (argc>1 && :: strcmp(argv[1], "child" ) == 0)
        {
            Child() ;
        }
        else
        {
            Parent() ;
        }
        return 0;
    }
    
    
    
    展开全文
  • Windows进程详解(完整版)

    千次阅读 2019-03-27 15:47:17
    Windows进程详解(完整版)

    Windows进程:指在Windows系统中正在运行的一个应用程序。

    特点:
    • 动态性:进程是程序的一次执行过程,是临时的、有生命周期的;
    • 独立性:进程是系统进行资源分配和调度的一个独立单位;
    • 并发性:多个进程可以在处理机上交替执行;
    • 结构性:系统为每个进程建立一个进程控制块。

    Windows系统进程:

    进程文件进程名称描述
    system processWindows内存处理系统进程Windows页面内存管理进程,拥有0级优先
    alg.exe应用层网关服务用于网络共享
    csrss.exeClient/Server Runtime Server Subsystem客户端服务子系统,用于控制Windows图形相关子系统
    ddhelp.exeDirectDraw HelperDirectX用于图形服务的一个组成部分
    dllhost.exeDCMO DLL Host支持基于COM对象支持DLL以运行Windows程序
    inetinfo.exeIIS Admin Services HelperInterInfo是Microsoft Internet Infomation Services (IIS)的一部分,用于Debug调试除错
    internat.exe无效Locales输入控制图标,用于更改类似国家设置、键盘类型和日期格式
    kernel32.dllWindows壳进程用于管理多线程、内存和资源
    lsass.exe本地安全权限服务控制Windows安全机制
    mdm.exeMachine Debug ManagerDebug除错管理用于调试应用程序和Microsoft Office中的Microsoft脚本Editor脚本编辑器
    mmtask.tsk多媒体支持进程控制多媒体服务
    mprexe.exeWindows路由进程向适当的网络部分发出网络请求
    msgsrv32.exeWindows信使服务调用Windows驱动和程序管理再启动
    mstask.exeWindows计划服务用于继承在特定的时间或日期备份或者运行
    regsvc.exe远程注册表服务用于访问在远程计算机的注册表
    rpcss.exeRPC PortmapperWindows的RPC端口映射进程处理RPC调用(远程模块调用)然后把它们映射给指定的服务提供者
    services.exeWindows Services Controller管理Windows服务
    smss.exeSession Manager Subsystem会话管理子系统,用以初始化系统变量
    snmp.exeMicrosoft SNMP AgentWindows简单的网络协议代理(SNMP)用于监听和发送请求到适当的网络部分
    spool32.exePrinter SpoolerWindows打印任务控制程序,用以打印机就绪
    spoolsv.exePrinter Spooler ServicesWindows打印任务控制程序,用以打印机就绪
    stisvc.exeStill Image Service用于控制扫描仪和数码相机连接在Windows上
    svchost.exeService Host Process标准的动态链接库主机处理服务
    systemWindows System ProcessMicrosoft Windows系统进程
    taskmon.exeWindows Task Optimizerwindows任务优化器监视使用某个程序的频率来整理优化硬盘
    tcpsvcs.exeTCP/IP ServicesTCP/IP Services Application支持透过TCP/IP连接局域网和Internet
    winlogon.exeWindows Logon ProcessWindows NT用户登录程序
    winmgmt.exeWindows Management Services透过WMI技术处理来自应用客户端的请求

    Windows程序进程:

    进程文件进程名称描述
    absr.exeBackdoor.Autoupder Virus这个进程是Backdoor.Autoupder后门病毒程序创建的
    acrobat.exeAdobe AcrobatAcrobat Writer用于创建PDF文档
    acrord32.exeAcrobat Reader一个用于阅读PDF文档的软件
    agentsvr.exeOLE Automation ServerMicrosoft Agent的一部分
    alogserv.exeMcAfee VirusScan反病毒软件,用于扫描文档和E-mail中的病毒
    avconsol.exeMcAfee VirusScan反病毒软件,用于扫描文档和E-mail中的病毒
    avsynmgr.exeMcAfee VirusScan反病毒软件,用于扫描文档和E-mail中的病毒
    backweb.exeBackWeb Adware广告插件,来自BackWeb Technologies
    bcb.exeBorland C++ BuilderBorland C++ Builder
    calc.exeCalculatorMicrosoft Windows计算器程序
    ccapp.exeSymantec Common ClientSymantce公用应用客户端
    cdpalyer.exeCD PlayerMicrosoft Windows包含的CD播放器
    charmap.exeWindows Character MapWindows字符映射表,用来帮助查找不常用的字符
    idaemon.exeMicrosoft Indexing Service在后台运行的Windows索引服务,用于帮助搜索文件在下次变得更快
    cisvc.exeMicrosoft Index Service Helper监视Microsoft Indexing Services的内存占用情况
    cmd.exeWindows Command PromptWindows控制台程序
    cmesys.exeGator GAIN AdwareGator GAIN是一个Adware广告插件
    ctfmon.exeAlternative User 无效 Services控制Alternative User无效Text Processor(TIP)和Microsoft Office语言条,该进程提供语音识别、手写识别、键盘、翻译和其他用户输入技术的支持
    ctsvccda.exeCreate CD-ROM Services在Win9X创建CD-ROM访问服务
    cutftp.exeCuteFTP一个流行的FTP客户端用于从FTP服务器上传/下载文件
    defwatch.exeNorton AntiVirus扫描文件和E-mail以检查病毒
    devldr32.exeCreate Device LoaderCreative Device Loader属于Create Soundblaster驱动
    directcd.exeAdaptec DirectCD一个用于文件管理器式的界面,烧录文件到光盘的软件
    dreamweaver.exeMacromedia DreamWeaver一个HTML编辑器用于创建站点和其它类别的HTML文档
    em_execute.exeLogitech Mouse Settings用于用户访问控制鼠标属性和查看Mouse Ware帮助
    excel.exeMicrosoft Excel一个电子表格程序,包括在Microsoft Office中
    findfast.exeMicrosoft Office IndexingMicrosoft Office索引服务,用于提高Microsoft Office索引Office文档的速度
    frontpage.exeMicrosoft FrontPage一个HTML编辑器用于创建站点和其它类别的HTML文档
    gmt.exeGator Spyware Component一个广告插件,随Gator安装和启动
    hh.exeGator Windows HelpWindows Help程序用以打开帮助文件和文档,包括在很多Windows程序中
    hidserv.exeMicrosoft Human Interface Device Audio Services后台服务,用来支持USB音效部件和USB多媒体键盘
    iexplore.exeInternet ExplorerIE网络浏览器透过HTTP访问WWW万维网
    kodakimage.exeImaging一个图片查看软件,包括在Windows,用以打开图像文件
    loadwc.exeLoad WebCheck用以定制一些Internet Explorer的设定,添加、删除或者更新用户profiles设定
    mad.exeSystem Attendant ServiceMicrosoft Exchange Server的后台程序,用以读取Microsoft Exchange的DLL文件,写log信息和生成离线地址簿
    mcshield.exeMcAfee VirusScan一个反病毒软件,用以扫描你的文件和E-mail中的病毒
    mgabg.exeMatrox BIOS GuardMatrox BIOS守护进程
    mmc.exeMicrosoft Management Console管理控制程序集成了很多的系统控制选项。例如:设备管理或计算机的权限控制
    mobsync.exeMicrosift Synchronization ManagerInternet Explorer的一个组成部分,用以在后台同步离线查看页面
    mplayer.exeWindows Media Player一个用以打开音乐、声音和视频文件的软件
    msaccess.exeMicrosoft Access一个数据库软件,包括在Microsoft Office中
    msbb.exeMSBB Web3000 Spyware Application包括在一些adware产品中,利用注册表随Windows启动
    msdtc.exeDistributed Transaction Coordinator控制多个服务器的传输,被安装在Microsoft Personal Web Server和Microsoft SQL Server上
    msi_execute.exeWindows Installer ComponentWindows Installer的一部分,用来帮助Windows Installer package files(MSI)格式的安装文件
    msimn.exeMicrosoft Outlook Express一个Email和新闻组客户端,包括在Microsoft Windows中
    msmsgs.exeMSN Messenger Traybar Process一个在线聊天和即时通讯客户端
    msoobe.exeWindows Product ActivationWindows XP License的Product Activation产品激活程序
    mspaint.exeMicrosoft Paint一个图像编辑器,包括在Microsoft Windows中
    mspmspsv.exeWMDM PMSP ServiceWindows Media Player7需要安装的Helper Service
    mysqld-nt.exeMySQL Daemon控制访问MySQL数据库
    navapsvc.exeNorton AntiVirus Auto-Protect Service扫描你文件和Email中的病毒
    ndetect.exeICQ Ndetect AgentICQ用来侦测网络连接的程序
    netscape.exeNetScape网络浏览器通过HTTP浏览WWW万维网
    notepad.exeNotepad字符编辑器,用于打开文档,在Windows中附带
    ntbackup.exeWindows BackupWindows备份工具,用于备份文件和文件夹
    ntvdm.exeWindows 16-bit Virtual Machine为了兼容旧的16位Windows和DOS程序而设置的虚拟机
    nvsvc32.exeNVIDIA Driver Helper Service在NVIDA显卡驱动中被安装
    nwiz.exeNVIDIA nView Control PanelNVIDIA nView控制面板在NVIDA显卡驱动中被安装,用于调整和设定
    osa.exeOffice Startup AssistantMicrosoft Office启动助手。随Windows启动,增强启动、Office字体、命令和Outlook事务提醒等特性
    outlook.exeMicrosoft Outlook一个Email客户端,包括在Microsoft Office中
    photoshop.exeAdobe Photoshop一个图像编辑软件,能够打开和编辑其它更多类型格式的图片
    point32.exeMicrosoft Intelimouse Monitor添加一个鼠标设定图标在工具栏
    powerpnt.exeMicrosoft PowerPoint一个演示软件,包括在Microsoft Office中
    pstores.exeProtected Storage Service控制保密的类容密码
    qttask.exeQuick Time Tray IconQuick Time任务栏图标在你运行Quick Time的时候启动
    realplay.exeReal Player一个媒体播放器,用来打开和播放音乐、声音和Real Media格式的视频文件
    rnaapp.exeWindows Modem Connection控制拨号modem连接
    rtvscan.exeNorton AntiVirus用以扫描你的文件和Email中的病毒
    rundll32.exeWindows RUNDLL32 Helper支持需要调用DLLs的程序
    sndrec32.exeWindows Sound RecorderWindows录音机,用以播放和录制声音文件(.wav)
    sndvol32.exeWindows Volume ControlWindows声音控制进程在任务栏驻留,用以控制音量和声卡相关选项
    spoolss.exePrinter Spooler SubsystemWindows打印机控制子程序,用以调用需要打印的内容从磁盘到打印机
    starter.exeCreative Labs Ensoniq Mixer Tray Icon状态栏图标在Creative Sound Mixer中被安装,为了Creative声卡(Soundblaster)
    systray.exeWindows Power ManagementWindows电源管理程序,用以控制节能和恢复启动
    tapisrv.exeTAPI ServiceWindows Telephony(TAPI)的后台服务程序
    userinit.exeUserInit ProcessUserInit程序运行登录脚本,建立网络连接和启动Shell壳
    visio.exeMicrosoft Visio一个图形化管理软件
    vptray.exeNorton AntiVirus扫描你的文件和Email中的病毒
    vshwin32.exeMcAfee VirusScan一个反病毒软件,用以扫描你的文件和Email中的病毒
    vsmon.exeTrue Vector Internet Monitor是ZoneAlarm个人防火墙的一部分,用以监视网络流经数据和攻击
    vsstat.exeMcAfee VirusScan一个反病毒软件,用以扫描你的文件和Email中的病毒
    wab.exeAddress Book在Outlook中的地址簿,用来存放Email地址、联系信息
    webscanx.exeMcAfee VirusScan一个反病毒软件,用以扫描你的文件和Email中的病毒
    winamp.exeWinAmpWinAmp Media Player是一个用来打开音乐、声音和视频文件以及用以管理MP3文件的软件
    winhlp32.exeWindows HelpWindows帮助文件查看程序,用来打开帮助文档,该程序包括在很多的Windows程序中
    winoa386.exeMS-DOS ConsoleWindows MS-DOS控制台
    winproj.exeMicrosoft Project一个项目计划编制程序
    winroute.exeWinRoute一个基于Windows的防火墙/路由/连接共享软件
    winword.exeMicrosoft Word一个字处理程序,包括在Microsoft Office
    winzip32.exeWinZip一个文件压缩工具,用于创建、打开和解压zip文件
    wkcalrem.exeMicrosoft Works Calender Reminder工作日程提醒,在后台处理和显示弹出计划的工作日志提醒
    wkqkpick.exeWinZip Traybar IconWinZip的状态图标,被允许在WinZip启动时启动
    wmplayer.exeWindows Media Player一个用来打开和播放音乐、声音和视频的软件
    wordpad.exeWordpad一个字符编辑器,用以打开和编辑txt和rtf文档
    ypager.exeYahoo Messenger HelperYahoo Messenger的状态栏图标,随Yahoo Messenger运行,是其一部分
    展开全文
  • Windows进程查找

    千次阅读 2019-09-04 20:23:05
    Windows下根据名称查找进程 使用vs调试C++程序时,有时由于强制退出,会出现 ***.exe无法写入 的错误,重启vs甚至都无法解决。 原因 由于调试强制结束,导致***.exe进程还在后台运行。 解决办法 打开命令提示符,...
  • windows进程

    千次阅读 2021-04-09 19:31:05
    日常使用idea开发时,有时候启动了tomcat不小心关掉了idea再打开idea时候启动服务时会报端口被占用,这时候要么去修改你的Tomcat端口号重新启动要么就把上个进程杀掉。 第一步:window +R 或者查cmd打开windows命令...
  • Windows——查进程端口、杀进程端口详细说明

    千次阅读 多人点赞 2022-01-26 09:50:18
    任务管理器打开方式: 第一种:同时按住ctrl键、shirt键和esc键。 第二种:同时按住ctrl键、alt键和‘.’键,然后选择任务管理器即可。 杀进程: 选择需要结束的任务,点击结束任务即可。 杀端口: 点击...
  • windows 启动后台进程

    千次阅读 2021-09-01 19:33:26
    开启新cmd窗口同时运行多个脚本,不阻塞程序运行 ... 程序中启动的进程信息不输出到当前窗口中,需要在启动时候使用 pythonw 1.py 不加start这些,但是调用窗口不能关闭,否则启动的后台都将关闭掉 window 暂时
  • 应急响应之windows进程排查

    千次阅读 2021-07-05 12:25:29
    #终止进程 taskkill /f /pid pid号 1. 查看网络连接 netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。 netstat [选项] 命令中各选项的含义如下: -a...
  • 首先,打开Windows的命令窗口,键盘 win + R,输入cmd,回车。 1.查询端口被占用的进程,命令 netstat -aon | findstr 8080 2.查询使用进程号的任务或软件,命令 tasklist | findstr 24596 该命令查询...
  • windows服务守护进程

    千次阅读 2020-04-29 13:55:29
    windows服务守护进程为什么选择用服务来守护进程注册服务双服务互相守护服务启动进程并保活启动进程进程保活 最近做一个项目, 保护我们云电脑中的计费程序等应用程序、脚本,不被用户结束。 综合各种方案,最终选择...
  • 任务管理器——性能——资源监视器——CPU选项卡——关联的句柄——搜索句柄——输入文件夹名——点击搜索
  • windows查看java进程信息

    千次阅读 2021-10-19 11:19:37
    windows查看java进程信息,可以显示出java命令行参数,查看tomcat等应用的位置 wmic process where caption="java.exe" get processid,caption,commandline /value 3.关于如何查看端口是否被占用,可以根据...
  • 一、tasklist 查看进程 1、"tasklist" 命令是一个用来显示运行在本地或远程计算机上的所有进程的命令行工具,带有多个执行参数。类似Linux系统的ps命令 2、显示结果由五部分组成:映像名称(进程名)、PID、会话...
  • Windows进程管理

    千次阅读 2018-05-30 22:59:16
    (2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows 进程的“一生”。 (3)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子...
  • 【实用】Windows删除进程的方法

    千次阅读 2019-09-11 10:02:07
    尝试重启电脑等等操作都不管用,vmware上 管理-从磁盘上...到此结束 虽然我很狼狈的一开机就打开D盘把文件删了 但是之前的那个进程还真没起来哈哈   以上~ 赶紧记录 今日份知识点哈哈 2019.09.11
  • 利用 bat 脚本强制杀死 Windows 进程

    千次阅读 2020-03-24 16:52:10
    @echo off  :start taskkill /im a.exe /f taskkill /im b.exe /f goto start 保存为 clear.bat 文件,打开后将一直无限循环...不断杀死 Windows 进程中的 a.exe b.exe 等进程,可以用来强制清理广告弹窗的进程 ...
  • 1.查看进程、杀进程(tasklist、taskkill) 1.1 查看进程列表 1.2 通过进程号终止进程 1.3 通过映像名称终止进程(支持通配符*模糊处理) 2.在Python中查看进程、杀进程 1.查看进程、杀进程(tasklist、taskkill...
  • Windows进程

    万次阅读 2020-06-23 21:46:48
    进程的创建 BOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, // command line string 命令行参数 LPSECURITY_ATTRIBUTES ...
  • windows查看进程中线程信息

    万次阅读 2020-02-20 14:32:50
    简介 经常在Linux下开发程序,使用习惯了 ps, top, gdb, strace等调试命令,用起来挺方便。 现在需要在在windows下调试,也查找了些工具和方法,...在状态栏右键——打开任务管理器——进程——菜单 查看 —— 选择...
  • windows 下查看进程开始运行的时间

    千次阅读 2020-10-11 12:38:33
    1. 打开运行 输入 msinfo32 然后在软件环境- 正在运行任务- 就能够看到运行开始的时间了.
  • 修改Windows系统单进程使用的内存上限,例:某程序调用内存因WINDOWS系统上限为2G,为使该程序完全的使用4GB内存,可以通过文档中的方法修改
  • Windows命令行模式快速杀掉进程

    千次阅读 2021-08-28 19:25:01
    步骤1:打开任务管理器,查看用户,查看想要关掉的进程名,如图我想要停止chromedriver.exe 步骤2:tasklist 查看Windows运行中的进程 找到相同的名称,可以看到名称是tasklist 里的名称是 chromedriver.exe ...
  • 对象、进程、线程是Windows2000三个基元成份,它们之间有互相交叉的关系。 1、对象 对象是一个抽象的数据结构,在Windows2000中用以表示广义的资源。它是构成OS的三个基元成份中非活动的成份,对象是数据和有关...
  • Windows下,默认值是512。但是可以改:/*** get and set the max handlers of opening files*/void testMaxHandlersOfFiles(){ printf( "maxstdio: %d\n", _getmaxstdio()); _setmaxstdio(2048); printf( ...
  • Windows进程控制

    千次阅读 2016-07-14 19:30:39
    Windows系统中,应用程序都以进程的形式存在于内存中。当运行一个程序的时候,操作系统就会将这个程序装入内存,并分配各种运行程序所需的资源,为进程创建主线程。 系统也提供了任务管理器,可供我们使用。管理...
  • Windows下C++实现进程间同步

    万次阅读 2018-11-26 19:19:31
    Windows下C++实现进程间同步一,方法介绍二,踩过的坑三,正确方式(附代码) 多线程同步在平常的使用中很常见,可以通过临界区,互斥量,事件等来实现,具体的选择依赖于不同的使用场景。但是进程同步使用的比较少,...
  • Windows查看进程占用并关闭进程

    千次阅读 2021-04-25 09:21:00
    Windows查看进程占用并关闭进程打开cmd查看所有端口占用查看指定端口占用结束进程方式一方式二 打开cmd win + R并输入cmd,回车进入 查看所有端口占用 netstat -ano 查看指定端口占用 netstat -aon|findstr "8081...
  • Windows进程间通信的各种方法

    千次阅读 2016-08-05 11:46:22
    1 Windows进程间通信的各种方法 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。 多进程/多线程是Windows操作系统的一个基本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 314,243
精华内容 125,697
关键字:

windows进程怎么打开