From 0b5815897d081d237d6ed1aef2b606caf4996ac6 Mon Sep 17 00:00:00 2001 From: "qcqcqc@wsl" <1220204124@zust.edu.cn> Date: Sat, 12 Apr 2025 10:47:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=A6=BB=E5=AD=90=E7=BB=88=E7=AB=AF?= =?UTF-8?q?=E7=9A=84stdout=E5=92=8Cstderr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 +- build/intercept.so | Bin 26664 -> 26816 bytes build/pty_dup.o | Bin 3032 -> 3648 bytes build/terminal_utils.o | Bin 4664 -> 6040 bytes logs/execve.log | 17 +++++++ logs/execve_out.log.2277570.stderr | 0 logs/execve_out.log.2277570.stdout | 28 +++++++++++ logs/execve_out.log.2277714.stderr | 2 + logs/execve_out.log.2277714.stdout | 5 ++ logs/execve_out.log.2278618.stderr | 2 + logs/execve_out.log.2278618.stdout | 5 ++ src/exec_hook.h | 11 +++++ src/pty_dup.c | 75 ++++++++++++++++++++++++++++- src/terminal_utils.c | 69 ++++++++++++++++++++------ src/terminal_utils.h | 2 +- 15 files changed, 201 insertions(+), 18 deletions(-) create mode 100644 logs/execve_out.log.2277570.stderr create mode 100644 logs/execve_out.log.2277570.stdout create mode 100644 logs/execve_out.log.2277714.stderr create mode 100644 logs/execve_out.log.2277714.stdout create mode 100644 logs/execve_out.log.2278618.stderr create mode 100644 logs/execve_out.log.2278618.stdout diff --git a/.vscode/settings.json b/.vscode/settings.json index a62f712..212db6e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -23,7 +23,8 @@ "init_cleanup.h": "c", "stdbool.h": "c", "stat.h": "c", - "debug.h": "c" + "debug.h": "c", + "types.h": "c" }, "C_Cpp.errorSquiggles": "disabled" } \ No newline at end of file diff --git a/build/intercept.so b/build/intercept.so index 52d9c832320e69fe45ed25716d2526cc2f4d7936..395caca5983ff9aba4f5be76a9a3351906c0ff9b 100755 GIT binary patch delta 7318 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 delta 6224 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 delta 744 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 AzW@LL literal 4664 zcmbuBYitx%6oBux6)FOK@P5hq2tHX_B=HdKZ1SN`Gi1{*nZZKaBFj2x(%eqAmPT`D5%4O`7;fN&BNpj8&`kocrjW4m-x^N$%Wx zzkANP=bn4#&YaL%n#uwJrX;`~XT_ePj9pw>Y=?O>%$Bkx>_*k?zqjh{4|?xpweEIL z>jiCkU^^%bqLS{8jPn}k2t&s>J`%3D1qXSv^88$Lap0t&!{M58932kVt{3&P6QW+e zLewiNM7@%G84j-si2iEXUsEIcYnO?7-C9wvm*X31MgR6HQEyx&>flOI-@)|;t1vdQ zhIyd>>gBoBzc_iVf-(1_?SIV9>U~3!0VOs?vF!gF4nw~)th23RHR21Li)k&AON z6)D#*4vgf(V1#<{k^B?T3^3ux&Fjzu*uvq!IoQp?o#0pR!`;L@6}`CHOmFwhY;JjR zkf-AM(K0mPa}315Y7qK!DR#B#-tKAEbvM^7u-@s4s+YdPQ!_V(@NxxM)rI_Sh~!M~ zSWSM&IjHyb?S-ydGsfk9p|;M|ru5$KDb`a5xt+rNfhz71_)&X=T)5C?h-rZ@4r7^x zSTNXso@fjv8e>(bPNFI{o#VXf8G)(CN>1%+qo6X%x@tV@oM?a~vd%tXSt2-PS>?v@ zl+4f4L`DBZ01lqmox)s}ZzdBjKr)*|G6Rsz9Wu-T#?wfTva5|ltmCYw8G;(0mx~ff z8^HYPg(dJL+mRo-{@b6kv;Eg^;1ieFv#6lWsLlEp0bi=VNA8>F$cuN+`y%i|bM-Pt zvBgPcwwRq})abCRBU_SIdzN>Pnue8gLeOVTkwnsr1syABWz2LCP%sXJWvpZ}80UlR zn4NG;RLMFqu)7I!BcaNg8yg=B-rL%iOFOw>eSK(KsBUw8j(6*Owr&m8ZM#omhz}CZ zs-fVfHSca^@Olg(D~E!zTvROZ{5}@wtPZSOys)w#vb-KR7L>p6p)IX`xvX)?g0f#g zLyY0IjPf2jQ{&}tm2(9?a`OW>u!8->F9h#sdC4yY#>$V}JoQ@W)e?OkBd{P8T(4JP ze@pU*eE1IF=wJEeYXr8-M}NN$f5wNm`|y+xw|#h*5AX5er+xUVKKuTSF$AEzqXYpv-Niw`ASjMz%%jUNP zGYsgYEhA|~BTm9fGuw>B#HGQE=9WDTJ6nuBO-=i?1IB@!4K13%#67~|@nkOBfjw}* zq8*83%*Z6bG?H+zjwY?F$#U7GX=We{p`Ec4X~z)CS%@o_W$aGK3ku#H_%_bK_W|Wc zgdoTlKvDcxgdoTlLQy=37XS$ITcId^g78IzpCSAS8Cp6 zl4CshSyB8hkN!p&LwSJc<1ehz-$gk7{;9Y)-aq)Zvf|Eq#vj#m%ffmFh>^RCQ~ z8k5(Q>N3nds)Xl=XpG_|3G#@v$DE@r{DN`8Gl#MX3UYaT5pkLH%&WL}{s&6?zmJXkVv*tlQ+TAI3*T#jolH7*uVl_lmTq4BKAaeZcTL z<&D2z+6Q5biZ}jeVGw=4.10.0 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (4.12.2) +Requirement already satisfied: networkx in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (3.4.2) +Requirement already satisfied: jinja2 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (3.1.6) +Requirement already satisfied: fsspec in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (2025.3.2) +Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.127 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (12.4.127) +Requirement already satisfied: nvidia-cuda-runtime-cu12==12.4.127 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (12.4.127) +Requirement already satisfied: nvidia-cuda-cupti-cu12==12.4.127 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (12.4.127) +Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (9.1.0.70) +Requirement already satisfied: nvidia-cublas-cu12==12.4.5.8 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (12.4.5.8) +Requirement already satisfied: nvidia-cufft-cu12==11.2.1.3 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (11.2.1.3) +Requirement already satisfied: nvidia-curand-cu12==10.3.5.147 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (10.3.5.147) +Requirement already satisfied: nvidia-cusolver-cu12==11.6.1.9 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (11.6.1.9) +Requirement already satisfied: nvidia-cusparse-cu12==12.3.1.170 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (12.3.1.170) +Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (0.6.2) +Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (2.21.5) +Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (12.4.127) +Requirement already satisfied: nvidia-nvjitlink-cu12==12.4.127 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (12.4.127) +Requirement already satisfied: triton==3.2.0 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (3.2.0) +Requirement already satisfied: setuptools in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (75.8.0) +Requirement already satisfied: sympy==1.13.1 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from torch) (1.13.1) +Requirement already satisfied: mpmath<1.4,>=1.1.0 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from sympy==1.13.1->torch) (1.3.0) +Requirement already satisfied: MarkupSafe>=2.0 in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (from jinja2->torch) (3.0.2) diff --git a/logs/execve_out.log.2277714.stderr b/logs/execve_out.log.2277714.stderr new file mode 100644 index 0000000..5c29e28 --- /dev/null +++ b/logs/execve_out.log.2277714.stderr @@ -0,0 +1,2 @@ +ERROR: Could not find a version that satisfies the requirement abglpkhnjokb (from versions: none) +ERROR: No matching distribution found for abglpkhnjokb diff --git a/logs/execve_out.log.2277714.stdout b/logs/execve_out.log.2277714.stdout new file mode 100644 index 0000000..6d6e5db --- /dev/null +++ b/logs/execve_out.log.2277714.stdout @@ -0,0 +1,5 @@ +欢迎使用北冥云计算服务! + [DEBUG][PID 2277714] src/pty_dup.c:95:dupIO(): forkpty result is: 0. + [DEBUG][PID 2277714] src/pty_dup.c:103:dupIO(): Child process ready. +Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple +Requirement already satisfied: torch in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (2.6.0) diff --git a/logs/execve_out.log.2278618.stderr b/logs/execve_out.log.2278618.stderr new file mode 100644 index 0000000..5c29e28 --- /dev/null +++ b/logs/execve_out.log.2278618.stderr @@ -0,0 +1,2 @@ +ERROR: Could not find a version that satisfies the requirement abglpkhnjokb (from versions: none) +ERROR: No matching distribution found for abglpkhnjokb diff --git a/logs/execve_out.log.2278618.stdout b/logs/execve_out.log.2278618.stdout new file mode 100644 index 0000000..9037a96 --- /dev/null +++ b/logs/execve_out.log.2278618.stdout @@ -0,0 +1,5 @@ +欢迎使用北冥云计算服务! + [DEBUG][PID 2278618] src/pty_dup.c:95:dupIO(): forkpty result is: 0. + [DEBUG][PID 2278618] src/pty_dup.c:103:dupIO(): Child process ready. +Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple +Requirement already satisfied: torch in /home/qcqcqc/miniconda3/lib/python3.12/site-packages (2.6.0) diff --git a/src/exec_hook.h b/src/exec_hook.h index 98f95d3..e83de8c 100644 --- a/src/exec_hook.h +++ b/src/exec_hook.h @@ -35,6 +35,17 @@ #endif +#define MAX_PATH_LEN 256 + +#define GET_LOG_FILE(c_pid, is_stdout) ({ \ + static char filename[MAX_PATH_LEN]; \ + snprintf(filename, MAX_PATH_LEN, "%s.%ld.%s", \ + LOG_OUT_FILE, \ + (long)c_pid, \ + (is_stdout) ? "stdout" : "stderr"); \ + filename; \ +}) + #define ANSI_COLOR_RED "\033[31m" #define ANSI_COLOR_YELLOW "\033[33m" #define ANSI_COLOR_RESET "\033[0m" diff --git a/src/pty_dup.c b/src/pty_dup.c index d818461..6a4d338 100644 --- a/src/pty_dup.c +++ b/src/pty_dup.c @@ -2,6 +2,7 @@ #include "signal_handlers.h" #include "terminal_utils.h" #include "debug.h" +#include FILE *log_file = NULL; pid_t child_pid; @@ -22,15 +23,66 @@ void print_child_status() { } } +// void dupIO() { +// pid_t pid; +// int master; +// struct termios term; +// struct winsize win; + +// DEBUG_LOG("Setup termios...."); +// setup_termios(&term); + +// signal(SIGINT, handle_sigint); +// signal(SIGCHLD, handle_sigchld); + +// if (ioctl(STDIN_FILENO, TIOCGWINSZ, &win) < 0) { +// perror("ioctl TIOCGWINSZ failed"); +// exit(1); +// } + +// pid = forkpty(&master, NULL, &term, &win); +// DEBUG_LOG("forkpty result is: %d.", pid); +// child_pid = pid; + +// if (pid < 0) { +// perror("forkpty failed"); +// exit(1); +// } else if (pid == 0) { +// DEBUG_LOG("Child process ready."); +// signal(SIGINT, SIG_DFL); +// return; +// } + +// DEBUG_LOG("Ready to handle IO"); +// handle_io(master); +// close(master); + +// if (WIFEXITED(child_status)) { +// exit(WEXITSTATUS(child_status)); +// } else if (WIFSIGNALED(child_status)) { +// exit(128 + WTERMSIG(child_status)); +// } + +// exit(1); +// } + + void dupIO() { pid_t pid; int master; + int stderr_pipe[2]; struct termios term; struct winsize win; DEBUG_LOG("Setup termios...."); setup_termios(&term); + // 创建stderr的pipe + if (pipe(stderr_pipe) < 0) { + perror("pipe failed"); + exit(1); + } + signal(SIGINT, handle_sigint); signal(SIGCHLD, handle_sigchld); @@ -47,14 +99,35 @@ void dupIO() { perror("forkpty failed"); exit(1); } else if (pid == 0) { + // 子进程 DEBUG_LOG("Child process ready."); signal(SIGINT, SIG_DFL); + + // 关闭pipe读端 + close(stderr_pipe[0]); + + // 重定向stderr到pipe写端 + if (dup2(stderr_pipe[1], STDERR_FILENO) < 0) { + perror("dup2 failed"); + exit(1); + } + close(stderr_pipe[1]); + return; } + // 父进程 + // 关闭pipe写端 + close(stderr_pipe[1]); + + // 设置pipe读端为非阻塞 + fcntl(stderr_pipe[0], F_SETFL, O_NONBLOCK); + DEBUG_LOG("Ready to handle IO"); - handle_io(master); + handle_io(master, stderr_pipe[0], child_pid); // 需要修改handle_io函数签名,传入stderr_pipe读端 + close(master); + close(stderr_pipe[0]); if (WIFEXITED(child_status)) { exit(WEXITSTATUS(child_status)); diff --git a/src/terminal_utils.c b/src/terminal_utils.c index 4213efa..6ce54b6 100644 --- a/src/terminal_utils.c +++ b/src/terminal_utils.c @@ -44,8 +44,10 @@ void setup_termios(struct termios *term) { cfsetospeed(term, B38400); } -void handle_io(int master_fd) { +void handle_io(int master_fd, int stderr_fd, pid_t c_pid) { struct termios orig_term, raw_term; + char buffer[BUFFER_SIZE]; + struct pollfd fds[3]; // 增加一个pollfd用于stderr // 保存原始终端设置 DEBUG_LOG("Saving original config."); @@ -57,9 +59,6 @@ void handle_io(int master_fd) { cfmakeraw(&raw_term); tcsetattr(STDIN_FILENO, TCSANOW, &raw_term); - char buffer[BUFFER_SIZE]; - struct pollfd fds[2]; - // 设置非阻塞模式 fcntl(master_fd, F_SETFL, O_NONBLOCK); fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); @@ -70,16 +69,24 @@ void handle_io(int master_fd) { fds[1].fd = master_fd; fds[1].events = POLLIN; - // 打开日志文件(以追加写模式) - int log_fd = open(LOG_OUT_FILE, O_WRONLY | O_CREAT | O_APPEND, 0644); - if (log_fd == -1) { + fds[2].fd = stderr_fd; // 新增stderr的fd + fds[2].events = POLLIN; + + // 打开两个日志文件 + // 获取stderr日志文件名 + const char *stdout_log = GET_LOG_FILE(c_pid, 1); + const char *stderr_log = GET_LOG_FILE(c_pid, 0); + int stdout_log_fd = open(stdout_log, O_WRONLY | O_CREAT | O_APPEND, 0644); + int stderr_log_fd = open(stderr_log, O_WRONLY | O_CREAT | O_APPEND, 0644); + + if (stdout_log_fd == -1 || stderr_log_fd == -1) { perror("Failed to open log file"); return; } while (1) { DEBUG_LOG("poll....."); - int ret = poll(fds, 2, 100); // 设置超时以便定期检查子进程状态 + int ret = poll(fds, 3, 100); // 修改为监控3个fd if (ret < 0) { if (errno == EINTR) continue; perror("poll failed"); @@ -89,12 +96,39 @@ void handle_io(int master_fd) { // 优先处理 PTY 输出,确保缓冲区中的数据被完全读出 DEBUG_LOG("Handling pty output..."); if (fds[1].revents & (POLLIN | POLLHUP)) { - DEBUG_LOG("Read from: %d \n\r", master_fd); ssize_t n = read(master_fd, buffer, sizeof(buffer)); if (n > 0) { // 直接写入,让终端自己处理控制序列 write(STDOUT_FILENO, buffer, n); - write(log_fd, buffer, n); + write(stdout_log_fd, buffer, n); + } + } + + // 处理stderr + // 处理stderr + DEBUG_LOG("Handling stderr output..."); + if (fds[2].revents & (POLLIN | POLLHUP)) { + ssize_t n = read(stderr_fd, buffer, sizeof(buffer)); + if (n > 0) { + // 先保存当前光标位置 + // write(STDERR_FILENO, "\033[s", 3); // 保存光标位置 + + // 移动到最后一行 + write(STDERR_FILENO, "\033[999B", 6); // 移动到底部 + write(STDERR_FILENO, "\r", 1); // 回到行首 + + // 输出带颜色的错误信息 + write(STDERR_FILENO, "\033[31m", 5); // 设置红色 + write(STDERR_FILENO, buffer, n); + write(STDERR_FILENO, "\033[0m", 4); // 重置颜色 + + // 恢复光标位置 + // write(STDERR_FILENO, "\033[u", 3); // 恢复光标位置 + write(STDERR_FILENO, "\033[999B", 6); // 移动到底部 + write(STDERR_FILENO, "\r", 1); // 回到行首 + + // 写入日志 + write(stderr_log_fd, buffer, n); } } @@ -120,8 +154,8 @@ void handle_io(int master_fd) { break; } - if (log_fd >= 0) { - written = write(log_fd, buffer, n); + if (stdout_log_fd >= 0) { + written = write(stdout_log_fd, buffer, n); if (written < 0) { perror("write to log failed"); break; @@ -152,9 +186,14 @@ void handle_io(int master_fd) { } } - DEBUG_LOG("Try to close log_fd: %d", log_fd); - if (log_fd > 0) { - close(log_fd); + DEBUG_LOG("Try to close stdout_log_fd: %d", stdout_log_fd); + if (stdout_log_fd > 0) { + close(stdout_log_fd); + } + + DEBUG_LOG("Try to close stderr_log_fd: %d", stderr_log_fd); + if (stderr_log_fd > 0) { + close(stderr_log_fd); } // 确保输出缓冲区被刷新 diff --git a/src/terminal_utils.h b/src/terminal_utils.h index 32731b1..107a233 100644 --- a/src/terminal_utils.h +++ b/src/terminal_utils.h @@ -4,6 +4,6 @@ #define TERMINAL_UTILS_H void setup_termios(struct termios *term); -void handle_io(int master_fd); +void handle_io(int master_fd, int stderr_fd, pid_t c_pid) ; #endif