我想知道 Windows 7 任务管理器中列出的应用程序、进程和服务之间的区别。在 UNIX/Linux 下,这些术语的作用如下:进程是指正在运行的可执行文件,即它们已加载到内存中并正在执行,同一个可执行文件可以运行多次,从而在内存中创建运行同一个可执行文件的多个进程;应用程序通常是具有相关图形用户界面的进程;服务通常是无头进程,不显示 GUI,而是在后台运行。
我想知道 Windows 7 任务管理器应用程序是否以与上面列出的 UNIX/Linux 相同的方式使用这些术语。
谢谢。
答案1
这里提出的大部分问题都得到了很好的回答这里所以我现在就不打算重复老内容了。
对于不以 svchost.exe 身份运行的服务,它们与其他非服务进程有何区别?
服务与其他进程的唯一区别在于,服务保持打开状态以响应某些操作。服务没有其他不同之处,但这确实意味着它们通常具有某些特征。它们通常是 CLI 应用程序,因为它们通常不需要(或不想要)GUI。如果主机进程要管理它们(例如 svchost.exe),它们也可以是 DLL;一般来说,DLL 是没有入口点的代码(这意味着它不能直接运行,但程序可以将其加载到内存中并运行代码)。
为了更好地解释这一点,我们需要引入一个新术语,线程。一个进程可以产生新的线程。关于线程,需要理解的主要一点是,每个线程都有自己的执行指针,并像父进程中的进程一样运行。svchost.exe 是一个可以向其注册服务的进程。当您这样做时,该服务将作为 svchost.exe 进程中的线程运行。关于线程,需要理解的另一件重要事情是,它们不会显示在任务管理器中(只有父进程会显示)。
您的系统上实际上有两个 svchost.exe 实例。一个是用户模式进程,另一个由 SYSTEM 拥有。SYSTEM 副本允许在任何人登录之前运行服务(这是大多数服务都希望能够做到的事情)。
为了让 svchost.exe 知道如何处理服务,它必须能够像 DLL 一样工作。这意味着它需要实现 DLLMain。此外,它还必须具有 HandlerEx 方法,该方法可响应 svchost.exe 触发的事件(SERVICE_CONTROL_STOP、SERVICE_CONTROL_SHUTDOWN、SERVICE_CONTROL_PAUSE、SERVICE_CONTROL_CONTINUE、SERVICE_CONTROL_INTERROGATE)。
如果服务已经实现了这些,那么它只需要在 svchost.exe 中注册,这样它就可以知道它。这可以通过应用程序完成执行程序和安装实用程序。
既然我已经解释了这一切是如何运作的,我必须提到,在较新的 Windows 版本中,其中大部分功能已被弃用。我相信目前建议的方法是让服务开发人员也创建自己的主机进程(他们自己的 svchost.exe)。这是因为 svchost.exe 自诞生以来一直是恶意软件的完美藏身之处。大多数用户不知道如何使用 svchost.exe 注册\取消注册服务,只知道如何查看它们(服务管理器)。
不允许开发人员附加到 svchost.exe 意味着他们必须为其服务创建一个新进程,这意味着这个新进程将显示在任务管理器中。不过,我相信即使在最新版本的 Windows 中,使用 sc.exe 的旧方法仍可用于向后兼容。考虑到 Windows 用户仍在处理自 DOS 以来就存在的错误,我想这在很长一段时间内仍然是可能的。正式来说,svchost.exe 现在仅适用于 Windows 服务。
答案2
您对不同类型程序的理解与 Windows 非常吻合。您启动可执行文件来创建进程,而应用程序是显示窗口的进程。
但是,服务不仅仅是一个无窗口的进程。(我不是专家,但以下是我在 Windows 上看到的更多信息。)
无窗口进程可以随时打开一个窗口,但服务与桌面隔离。
您可以轻松地将服务设置为随计算机自动启动。当您停止某项服务时,它似乎需要一些时间才能正常关闭,而不是直接终止进程。
如果您转到“服务”,您将看到列出了几个服务,但状态为“已停止”——Windows 不会跟踪此类已停止的应用程序!
如果打开服务程序,您可以看到服务的属性指定使用某些命令行参数运行可执行文件。
虽然您可以让多个进程运行同一个可执行文件,但我从未见过重复的服务。如果您按 PID 对服务进行排序,您会发现一个进程可以运行多个服务。