Linux下,创建休眠进程sleep,将进程移至后台&,查看后台进程命令jobs,使用fg将后台程序移至前台,改变进程优先级nice,renice,使用kill杀死后台进程,存放进程信息的文件

Linux下,创建休眠进程sleep,将进程移至后台&,查看后台进程命令jobs,使用fg将后台程序移至前台,改变进程优先级nice,renice,使用kill杀死后台进程,存放进程信息的文件

一、使用sleep创建一个休眠程序:
sleep secs命令可以创建一个进程,这个进程会休眠secs秒,然后结束,休眠的过程啥也不干,输入啥信息也没用:

在这里插入图片描述
在这里插入图片描述
这个进程休眠了三秒,然后醒了,然后没了,但是它具备进程该有的信息,比如pid,移至后台,接受信号等。

二、注意将休眠进程占领了前台导致键盘输入无效,不想让它打扰别的指令,需要使用后接&命令使其转到后台运行,命令更改为:
sleep 1000 & //此命令创建一个休眠1000s的进程并将其放到后台运行,有返回值

在这里插入图片描述
1、创建后台进程成功并返回了后台进程编号【1】和pid,可在现有进程中使用ps命令查找到后台休眠
进程:

在这里插入图片描述
2、使用jobs命令单独查看后台进程
在这里插入图片描述
3、使用fg命令将后台进程移至前台,
命令:
fg num//这里的num使后台进程的编号,不是pid,移到前台后,这个睡眠进程占领了前台,只能等它睡完或者CTRL+c使用中断信号打断它了。

在这里插入图片描述
在这里插入图片描述

三、优先级NI(nice),PR
系统中的两种优先级:
NI,实际nice值,从-20 - 19,越大则优先级越低,越小则优先级越高,优先级越高则越有能力占用更多的cpu时间,可以调整。
PR(+20),将nice级别显示映射到更大优先级队列,-20映射为0,无法调整,只能查看。

1、使用nice命令在创建进程时设置优先级nice,记得加参数-n来设置优先级数字
nice -n -5 sleep 1000 & //此命令在创建一个休眠进程时将其优先级设置为-5

在这里插入图片描述

在这里插入图片描述

2、使用renice命令给已经创建好的进程重新设置优先级nice
renice -20 pid //此命令给pid进程将nice设置为-20

在这里插入图片描述
四、使用kill杀后台进程
kill %num可以杀对应后台编号的进程。
kill num则是杀对应pid的进程。

五、存放进程信息的文件
虚拟文件系统:这个目录下的文件夹都是假的,/proc/
1、这个文件中的数字都是进程ID,伴随进程的改变而改变,存放进程相关的数据
2、字符信息是硬件信息,采集服务器自身内核,进程运行的状态信息。

在这里插入图片描述

/proc/cpuinfo存放CPU信息
/proc/meminfo存放内存信息
/proc/cmdline存放内核信息

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是修改后的 C++ 代码: ```c++ #include <iostream> #include <Windows.h> #include <vector> #include <string> #include <sstream> #include <chrono> #include <thread> using namespace std; vector<string> split(string s, char delimiter) { vector<string> tokens; string token; istringstream tokenStream(s); while (getline(tokenStream, token, delimiter)) { tokens.push_back(token); } return tokens; } int get_available_com_ports() { int count = 0; for (int i = 1; i <= 256; i++) { stringstream ss; ss << "COM" << i; HANDLE hComm = CreateFile(ss.str().c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hComm != INVALID_HANDLE_VALUE) { CloseHandle(hComm); count++; } } return count; } void child_process() { // 子进程执行的任务 while (true) { cout << "子进程正在执行任务..." << endl; this_thread::sleep_for(chrono::seconds(1)); } } int main() { int com_count = 0; while (true) { com_count = get_available_com_ports(); cout << "当前空闲串口数量:" << com_count << endl; this_thread::sleep_for(chrono::seconds(5)); if (com_count <= 1) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); ZeroMemory(&pi, sizeof(pi)); if (!CreateProcess(NULL, "child.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { cerr << "无法创建进程!" << endl; break; } cout << "子进程已开启" << endl; } else if (com_count >= 2) { HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pi.dwProcessId); if (hProcess != NULL) { TerminateProcess(hProcess, 0); CloseHandle(hProcess); } cout << "子进程已关闭" << endl; } } return 0; } ``` 修改后的 C++ 代码中,我们使用了 Windows API 来实现串口数量的检测,并通过判断空闲串口数量来创建或关闭子进程。在创建进程时,我们使用了 `CreateProcess` 函数,该函数可以启动一个新进程并返回一个 `PROCESS_INFORMATION` 结构体,该结构体包含了新进程信息,如进程 ID 等。在关闭子进程时,我们使用了 `OpenProcess` 函数来打开进程句柄,并使用 `TerminateProcess` 函数来结束进程的执行。 需要注意的是,由于 C++ 与 Python 不同,C++ 中没有现成的字符串分割函数,因此我们自己实现了一个 `split` 函数用于分割字符串。此外,由于 C++ 中的线程库与 Python 中的不同,因此我们使用了 `this_thread::sleep_for` 函数来实现线程的休眠
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值