监视进程的程序怎么写

时间:2025-01-28 14:19:52 单机游戏

编写一个监视进程的程序可以通过多种方法实现,包括使用shell脚本、Python、C++等。下面我将提供几个示例,分别用shell脚本和Python编写监视进程的程序。

使用Shell脚本

```bash

!/bin/sh

参数:要监控的进程名

process_name1="$1"

process_name2="$2"

while true; do

检查第一个进程是否在运行

if ! pidof "$process_name1" >/dev/null; then

echo "$process_name1 is not running! Now begin to run..."

./hello1 &

fi

检查第二个进程是否在运行

if ! pidof "$process_name2" >/dev/null; then

echo "$process_name2 is not running! Now begin to run..."

./hello2 &

fi

每隔5秒检查一次

sleep 5

done

```

使用Python

```python

import os

import time

import signal

import subprocess

def monitor_process():

pid = os.fork()

if pid == 0:

子进程执行的操作,这里就是运行目标进程

subprocess.call(['python', 'test.py'])

else:

父进程的操作,那就是监控

while True:

time.sleep(5)

try:

os.kill(pid, 0)

except OSError:

print("被监控进程已停止,准备重启...")

如果进程不存在就重新启动

subprocess.call(['python', 'test.py'])

break

if __name__ == "__main__":

monitor_process()

```

使用C++

如果你需要更复杂的进程监控功能,可以使用C++编写。以下是一个简单的C++示例,使用`PsSetCreateProcessNotifyRoutine`函数来监视进程创建事件:

```cpp

include

include

NTSTATUS PsSetCreateProcessNotifyRoutine(IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, IN BOOLEAN Remove);

NTSTATUS MyCreateProcessNotifyRoutine(

IN HANDLE ParentId,

IN HANDLE ProcessId,

IN BOOLEAN Create

) {

std::cout << "Process created: " << ProcessId << std::endl;

return STATUS_SUCCESS;

}

int main() {

PsSetCreateProcessNotifyRoutine(MyCreateProcessNotifyRoutine, FALSE);

while (true) {

Sleep(1000);

}

return 0;

}

```

总结

以上示例展示了如何使用不同的编程语言和工具来编写进程监控程序。你可以根据自己的需求选择合适的方法。对于简单的监控需求,shell脚本或Python脚本通常就足够了。对于更复杂的场景,可能需要使用更底层的编程接口或库来实现。