Articles of 进程

监视进程状态转换

我需要编写将监视指定的过程的Linux应用程序。 是否有可能被告知过程状态的每一个变化? 我的意思是在task_struct每个字段state变化

共享父subprocess之间的指针

我在Linux上使用函数Fork()在主进程中创build了一个C程序来创build另一个subprocess。 我的目标是在主进程中创build一个指针(int *),并在subprocess内改变它,在subprocess被终止后,我们回到主进程并显示指针的值(int *)。 这就是我的程序的样子: #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> int main (){ int i, *x, f; *x = 0; printf("address from father: %p pid: %d\n", x, getpid()); f = fork(); if (f==0) { *x = 5;//change the value of the pointer inside the child printf("address from son: %p ppid: %d\n", x, getppid()); exit(0); […]

如何获得所有后裔在Linux中的cid的subprocessID

如果我fork和subprocess然后exec和创build更多的subprocess(它们本身可以创build更多的进程),我怎么得到从第一个进程的所有后代进程的pid列表? 有没有更好的方法,然后循环/proc/和检查每个进程的PPid (进程的ID的父)?

当线程释放其资源

在pthread_detach手册页中,我读到了当任何线程被分离时,然后在线程终止的时候,它将资源释放回系统。 线程资源是什么?它是线程使用的内存的一部分,如果内存是进程地址空间的一部分的话。 我想了解这一点,但我知道了。 那么可连接线程呢,线程什么时候释放它的资源呢? 在pthread_join还是在终止或进程的时候? 在pthread_cancel命令中释放资源时。

Linux shell创build后台进程 – ls&不返回提示符,要求Enter按下

我正在学习在Linux(或MacOS)shell中创build后台进程。 大多数命令按预期运行 – 运行命令$<command> &后会返回提示符,例如$top & , $man ls &等。 但是,我有一个命令ls的问题:执行$ls &不立即返回到其他人的提示,但它需要我按回车回来的提示。 我怎样才能解释这一点? 谢谢。

处理退出和对线程的影响

在维护中,我看到项目代码(在Linux上的c/c++中)调用libc exit函数,以防某些不可恢复的错误。 但是,此进程终止调用跨多个线程使用(每个线程面临不可恢复的情况时)。 现在 – 是否可以从主线程以外的线程调用该进程,而没有任何副作用。 每当调用exit (无论是在主线程还是在其他线程中),都可以保证线程的正常退出。 我知道标准(手册页)对此没有提到,最好的办法是,启动所有线程的正常终止并使用通知机制,必须通知main线程进行正常的终止。 但是,由于它是一个正在维护中的项目,因此在更改之前要检查当前的行为是否正确。 我面对的问题是,我可以看到随机崩溃,其中一个线程是在exit调用执行的正常进程下。

使用fork()和pipe道的进程环

一个小时以来,我一直在想我这个问题。 我必须用n个进程创build一个进程环(数量作为参数通过cmd传递)。 父进程将他的PID发送给他的第一个孩子,这个人把他的父母的PID和他自己的PID发送给他的下一个兄弟,直到我们创build了n个孩子。 之后,父进程得到所有他的孩子的PID的增加。 假设父进程的PID是3400,我们创build了两个subprocess,所以环是由三个进程组成的 3400 + 3401(第一个孩子的PID)+ 3402(第二孩子的PID)= 10203 父进程应该得到这个10203。 我曾经想过一个“for”循环,在这个循环中,subprocess只使用一个pipe道将其兄弟PID从兄弟添加到兄弟。 尽pipe如此,我还没有遇到一个解决scheme。

Linux – 限制每个进程的线程数

我写了一个C ++程序,在几个algorithm上做了一些基准testing。 其中一些algorithm正在使用其他库进行计算。 这些外部库(我没有控制权)使用multithreading,这使得很难获得一个合适的基准(一些algorithm是单线程的,一些是multithreading的)。 所以在做基准testing的时候,我想限制线程为1.是否有无论如何,我可以在Linux中启动一个程序,并告诉它使用最多1个线程,而不是外部库中的默认值(这等于核心数量)?

在UNIX(或LINUX)中退出并等待函数

我正在编写一个程序,模拟一个基于Unix的操作系统,我有一些问题: 来自unix.org wait()函数将暂停调用线程的执行,直到其终止的subprocess之一的状态信息可用,或者直到发送其操作是执行信号捕获function或终止进程的信号 让我们想象一下,有两个subprocessB和C的进程A. 如果B和C调用退出函数,然后A调用wait函数,哪个退出状态将被检索? 来自B的还是来自C的 ? 首先,为什么? 当进程处于等待状态时,它不会执行它的代码,直到例如一个已终止的subprocess的状态信息可用为止,对吗? 所以不能在等待的时候调用叉子function,对吗? 3.在UNIX中通常可以杀死进程的时间有什么限制吗? 3.A. 用户是否有权终止根进程? (所有的根进程?)

Waitpid和同步问题

我创build了一个模仿std::thread的简单Process类。 它应该只在linux上工作。 struct Process { Process(/*…*/) { /* fork + join, initialize m_pid */ } ~Process() { assert(!joinable()); } bool joinable() const { return m_pid != 0; } void join() { assert (joinable()); int status; waitpid(m_pid, &status, 0); m_pid = 0; } private: std::atomic<pid_t> m_pid; }; 我有一个额外的要求:我需要能够从另一个线程停止进程。 例如: Process p(/* … */ ); Thread 1: […]