Browse Source

fix(procfs): 修复进程名称显示问题 (#1245)

* fix(procfs): 修复进程名称显示问题

修改ProcessControlBlock::generate_name函数,使其只返回可执行文件的basename,
而不是完整的路径和所有参数。这样/proc/*/status中显示的进程名称将符合
Linux的行为规范。

例如:/bin/busybox 进程将显示为 "busybox" 而不是 "/bin/busybox -/bin/busybox sh --login"

Signed-off-by: longjin <longjin@DragonOS.org>

* refactor(process): 简化进程名称生成逻辑

移除`generate_name`函数中未使用的`args`参数,简化代码逻辑。

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
LoGin 2 weeks ago
parent
commit
1875b2feb0
2 changed files with 5 additions and 9 deletions
  1. 4 8
      kernel/src/process/mod.rs
  2. 1 1
      kernel/src/process/syscall/sys_execve.rs

+ 4 - 8
kernel/src/process/mod.rs

@@ -8,7 +8,6 @@ use core::{
 };
 
 use alloc::{
-    ffi::CString,
     string::{String, ToString},
     sync::{Arc, Weak},
     vec::Vec,
@@ -1158,13 +1157,10 @@ impl ProcessControlBlock {
     }
 
     /// 生成进程的名字
-    pub fn generate_name(program_path: &str, args: &Vec<CString>) -> String {
-        let mut name = program_path.to_string();
-        for arg in args {
-            name.push(' ');
-            name.push_str(arg.to_string_lossy().as_ref());
-        }
-        return name;
+    pub fn generate_name(program_path: &str) -> String {
+        // Extract just the basename from the program path
+        let name = program_path.split('/').last().unwrap_or(program_path);
+        name.to_string()
     }
 
     pub fn sig_info_irqsave(&self) -> RwLockReadGuard<ProcessSignalInfo> {

+ 1 - 1
kernel/src/process/syscall/sys_execve.rs

@@ -73,7 +73,7 @@ impl SysExecve {
     ) -> Result<(), SystemError> {
         ProcessManager::current_pcb()
             .basic_mut()
-            .set_name(ProcessControlBlock::generate_name(&path, &argv));
+            .set_name(ProcessControlBlock::generate_name(&path));
 
         do_execve(inode, argv, envp, frame)?;