Articles of 进程

从/ proc / net / sockstat获取networking连接

我在/ proc中find了这个显示套接字的信息: $ cat /proc/net/sockstat sockets: used 8278 TCP: inuse 1090 orphan 2 tw 18 alloc 1380 mem 851 UDP: inuse 6574 RAW: inuse 1 FRAG: inuse 0 memory 0 你能帮我find这些值是什么意思吗? 也是这些值足够可靠,或者我需要在其他地方search它? 这些其他的方法是find有关Linux中的TCP / UDP连接的信息?

如何从长时间运行的linux命令发送进程进度信息

我打算写一个linux命令,它将处理(用自定义逻辑)一个非常大的文件。 一旦运行此命令,完成任务将需要几个小时。 给eta输出最好的方法是什么? 写一个100字节的进度状态文件的想法呢? 在特定的阶段,我可以写入字节到文件。 说在40%,我可以写40个字节的文件。 一旦文件大小达到100字节的大小,这意味着该过程完成。 所以要监视进度,我们只需要检查这个文件的大小。 有没有处理这种进度信息的一般方法? 我不想在我的程序中包含太多的逻辑来显示进度信息。 我正在寻找一个简单的解决scheme。 有什么build议么?

在C中使用具有dynamic分配variables的pipe道和结构

我正在写一个程序,需要从父进程传递一个matrix到它的孩子(这就是为什么我使用fork()指令)。 我刚刚阅读了这个,并且自己解决了这个问题,但我仍然不明白如何使用read()和write()指令来创build到目前为止所创build的pipe道。 我知道这些指令写了一系列的字节,但我不确定如何使用它们的结构或dynamic分配的variables(如matrix)。 这里是我用来testing的代码(注意我所提的评论): #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> // Structure definition (Matrix) typedef struct { int **mat; int rows; int cols; } Matrix; int main() { // Create the pipe int file_desc[2]; if (pipe(file_desc) != 0) exit(1); // Create two processes if (fork() == 0) { /** Instructions for the child […]

使用PHP列出所有正在运行的进程

我正在尝试使用PHP获取当前在我的Ubuntu服务器上运行的所有进程的列表。 理想情况下,我想获得以下信息: 进程ID 用于执行进程的命令 对过程的论证 我知道我可以使用exec调用ps来列出当前正在运行的进程。 exec('ps aux', $output); 但是,输出格式化为任意数量的空格,因此parsing它并不是世界上最简单的事情。 我可能会使用explode或preg_split来parsing,但有没有更容易的方法来获得所有正在运行的进程清单,使用php ,以及进程ID,命令和参数?

如何在实时Linux中select线程/进程优先级?

我正在开发实时软件,它将在PREEMPT_RT补丁上运行在Linux上。 虽然这可以让我通过使用Linux实时调度程序( SCHED_RR或SCHED_FIFO )获得实时性能,但我不确定我应该为我的线程使用哪些优先级值。 在我的系统中,当我看到我看到的优先级(仅显示RTPRIO进程): $ ps -e -o cmd,pri,rtprio CMD PRI RTPRIO [sirq-high/0] 89 49 [sirq-timer/0] 89 49 [sirq-net-tx/0] 89 49 [sirq-net-rx/0] 89 49 [sirq-block/0] 89 49 [sirq-block-iopo] 89 49 [sirq-tasklet/0] 89 49 [sirq-sched/0] 89 49 [sirq-hrtimer/0] 89 49 [sirq-rcu/0] 89 49 [posixcputmr/0] 139 99 [events/0] 41 1 [irq/17-systemac] 90 50 [irq/19-watchdog] 90 50 […]

如何为SIGCHLD创build一个信号处理程序来获取shell中的后台进程?

目前我正在制作一个shell,它对它所执行的前台进程工作正常。 现在我必须实施后台stream程和工作控制,对于我应该如何处理,我感到困惑。 我明白,如果我想在后台运行proccesses,我应该设置他们的pgid,而不是等待他们,但是我试图收获他们时已经打了一堵墙。 我有两个结构:工作和过程 typedef struct job { int is_background_job; pid_t pgid; int job_status; process *p; // List of processes to execute for this job struct job *next; // If a background job, it will be in a global linked list of job structs } job; typedef struct process { char **argv; process *next; // […]

embedded式linuxsubprocess创build问题

我在我的主板上使用了Linux内核2.6.30。 它有128MB的DDR2。 我的主要应用程序占用了近80MB的系统内存。 执行所有应用程序后,只剩下25MB。 我想从我的主应用程序(使用80MB)执行系统命令。 但是没有执行。 根据我的理解,每个subprocess需要与父进程相同的内存(我从fork函数手册中获得了这个描述)。 所以在我的情况下,新的subprocess需要另外80MB不可用。 因此系统调用不起作用。 系统命令在执行命令后必须立即执行,主要应用程序中的步骤需要系统命令的结果(例如需要将grep命令的输出存储在文件中并立即读取该文件以供进一步处理)。 因此我不能使用IPC机制。 什么是其他方式? Saurabh Shah

如何监控过程生命

我有一个问题,我有一个控制可执行文件,监视几个进程,如果有人死了,那么它会重新启动它。 在Windows上,我们使用WaitFOrMultipleObject来处理句柄数组中传递的进程句柄。 如果任何进程死亡,我们得到WaitForMultipleObject确认。 现在我们必须在Linux上实现它。 我们将如何做? 等待只有一个进程ID,而我们必须监视多个进程。

父/子exception退出时保持分叉进程(C ++)

我试图执行与当前进程并行的另一个命令行进程。 但是,我意识到,命令行程序有时会exception退出,这也会杀死我的主程序。 // MAIN PROGRAM pid = fork(); char *argv[] = { stuff.. }; if (pid == 0) { int rc = execv("command line program…", argv); } // DO OTHER STUFF HERE. if (pid > 0) { waitpid(pid, 0, 0); } 在命令行程序exception死后,有什么方法可以让我的主程序继续运行吗? 谢谢! [更新]:是的,主进程正在写入一个文件的命令行正在读取,但它是一个正常的文件,而不是一个pipe道。 我收到一个段错误。 由于subprocess不经常崩溃,所以我很难重现这个错误。 但它确实发生。 随机崩溃是命令行程序中的一个已知错误,这就是为什么即使命令行死掉也要保留主程序的原因。

是否有可能完全pipe理stream程及其叉的生命周期?

考虑一个pipe理用户定义程序的系统: 程序可以是任何东西。 它的命令行是由一些configuration文件中的非特权用户定义的。 它可以是/bin/ls ,可以是/usr/sbin/apache ; 用户可以指定他被允许开始的任何事情。 每个程序都以非root用户身份运行。 任何给定的用户都可以configuration任意数量的程序。 每个程序运行只要它想。 每个程序可能调用fork() , exec()等 每个程序可以将自己设置为会话领导者(即, setsid() )。 启动程序的系统可能无法连续运行。 它启动一个程序,然后退出。 必须能够执行“停止所有程序P的程序,包括子/叉”的操作。 “find属于程序P的所有进程”的动作必须是可能的。 下面是一个问题:如何在Linux进程模型中提供这样一个系统? 天真的方法: 用fork() , exec() , setuid()等启动程序。 将子PID(加上其开始时间戳,从/proc/stat中唯一地永久标识)写入一个文件。 要停止单个进程,请将SIGTERM设置为PID。 要查找所有进程,请检查/proc基于PID构build进程层次结构。 这个方法有一个很大的漏洞:任何进程都可能会分叉并从其进程组中分离出来。 查看stream程层次是不够的。 程序创build新程序后,不可能将原点追溯回原始程序。 解决方法是确保每个程序都以唯一的UID启动。 这是不可取的或特别可行的,因为(人)用户可以定义任意数量的程序; 系统将不得不以编程方式为每个程序创build新的唯一用户。 我到目前为止唯一的想法是在程序的初始化过程中注入一个特殊的保留的环境variables,即使用env PROGRAM=myprogram <command line>运行程序。 然后,系统可以要求所有进程必须inheritance父母的环境。 系统可以定期拖网/proc并强行杀死任何缺lessPROGRAM环境variables的进程。 我可以使用Linux系统调用API有没有什么秘密?