Articles of 进程

我怎么知道一个过程的最后一个调度时间

我目前遇到一个问题,一个进程似乎卡住某种程度上,它只是没有计划,状态总是'S'。 我有一段时间通过debugfs监视sched_switch_task跟踪,没有看到进程得到预定。 所以我想知道内核最后一次计划这个进程的时间是什么时候? 非常感谢。

为什么64位寻址的sys_write调用可以正常工作,寄存器中的参数用于32位寻址

这是一段代码,引起了我的问题: mystr: .string "ABCDEFGH" .set mystrlen, . – mystr .text .globl main .type main, @function main: sub $0x10, %rsp movq $0x44434241, 0x8(%rsp) lea 0x8(%rsp), %rcx movq $4, %rax movq $1, %rbx //movq $mystr, %rcx //movq $mystrlen, %rdx movq $4, %rdx int $0x80 movq $1, %rax movq $0, %rbx int $0x80 表示片段不起作用,在64位寻址寄存器为系统调用参数cuz应分别为rdi, rsi, rdx第一,第二和第三系统调用参数,而不是rbx, rcx, rdx […]

在新进程中运行方法并等待它们完成

我需要我的应用程序能够在一个新的过程下运行一些方法,理想情况下,能够从这些方法获得返回值,但我还没有find我如何做到这一点(我的C + +知识是相当基本的)。 所以说得更好,比方说我有方法A,A1和A2。 方法A将开始执行,并在某个时候会: 在新的进程下运行方法A1 等待A1完成,并可能得到返回值 在另一个新进程下运行方法A2 等待A2完成并再次获得返回值 在原始进程下继续运行代码 我发现我可以使用fork()在subprocess中运行代码,但是这不适合我的需求,因为它似乎是创build父进程的副本,而不仅仅是运行我只希望在新进程中的特定代码。 这里是我试过的一个摘录,我不知道是否可以修改它来做我想做的事,或者如果我完全使用其他的东西: int main(){ std::cout << "START" << std::endl; test1(); test2(); std::cout << "FINISH" << std::endl; return 0; } void test1(){ pid_t pid = fork(); if (pid == 0){ int i = 0; for (; i < 5; ++i) { std::cout << "Test 1 " […]

Linux:有没有办法使用ptrace而不停止/暂停进程(SIGSTOP)?

我试图将一个程序从Windows移植到Linux。 当我发现Linux上没有“真正的” ReadProcessMemory对应项时,遇到了一个问题。 我寻找一个替代品,我发现ptrace ,一个强大的stream程debugging器。 我在C ++中快速地编写了两个小控制台应用程序来testingptrace ,然后在程序中使用它。 TestApp 这是微量元素。 它每隔50毫秒不断打印两个整数,每次增加1个值。 #include <QCoreApplication> #include <QThread> #include <iostream> using namespace std; class Sleeper : public QThread { public: static void usleep(unsigned long usecs){QThread::usleep(usecs);} static void msleep(unsigned long msecs){QThread::msleep(msecs);} static void sleep(unsigned long secs){QThread::sleep(secs);} }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); int value = […]

如何在计算机群集上运行进程时访问标准输出?

介绍 我使用一台计算机集群,通过.pbs文件提交( qsub )作业。 缺省值是在执行qsub命令的工作目录中的文件上打印标准输出和标准错误。 问题 对我来说,问题是标准输出和标准错误文件只出现在stream程结束时,而我希望能够直接监控stream程的进展。 思考 我知道以下选项存在 #PBS -o #PBS -e #PBS -j [oe/eo] 以表示标准输出和标准错误的特定文件名称和位置。 不过,有两点我不清楚 我不太清楚在使用数组时它是如何工作的(通过#PBS -t )。 一个PBS_ARRAYID标准输出会覆盖以前的标准输出吗? 是否将整个数组的所有标准输出打印在同一个文件中,或者有没有办法在文件名中包含PBS_ARRAYID ? 在这个过程结束之前,使用这些选项是否可以帮助我以任何方式访问标准输出? 题 在计算机群集上提交过程时,如何在过程结束之前将标准输出和标准错误可视化?

在变成不可行之前,父母可以产生多less个subprocess?

我是C程序员,第一次学习fork() , exec()和wait() 。 我也白板的标准C程序将在Linux上运行,并可能需要大量的subprocess。 我不能指望的是……有多less个subprocess对于一个父辈来说产卵然后等待呢? 假设我的代码如下所示: pid_t status[ LARGENUMBER ]; status[0] = fork(); if( status[0] == 0 ) { // I am the child exec("./newCode01.c"); } status[1] = fork(); if( status[1] == 0 ) { // child exec("./newCode02.c"); } …etc… wait(status[0]); wait(status[1]); …and so on…. 显然, LARGENUMBER越大,父母仍然在分岔或成为僵尸或其他人的机会越大。 所以这个实现对我来说似乎有问题。 据我了解,父母一次只能等一个孩子? 如果LARGENUMBER很大,并且运行状态[0] = fork(); 并等待(状态[0]); 是实质性的? […]

如何跟踪Unix C ++上的进程?

我有一个程序(A)启动另一个程序(B)。 我想要的是当每次B收到信号A发送这个信号给B和B的所有subprocess。我真的不知道如何在这里实现一些东西: 1)。 我如何确定信号被发送到B? 2)。 如何将这个信号保存在variables中? 3)。 如何循环,直到B还活着? int main() { pid_t pid = fork(); int32_t num = 0; if (pid == 0) { static char *argv[] = {"main", NULL}; execv(argv[0], argv); //start program B } else{ while(/*B is alive*/){ //if program B receives signal //I want to send this signal to B and all […]

运行这么多ruby进程是否正常?

我在加载服务器时遇到问题,正在运行“顶部”,看到了这一点: 替代文字http://share.shpigford.com/images/ruby_processes-20091112-103834.png 几十个ruby进程…我不知道这是什么意思,如果这是正常的。 🙂

Linux I / O来运行守护进程/进程

是否可以运行进程的I / O? 我有多个游戏服务器像这样运行: cd /path/to/game/server/binary ./binary arg1 arg2 … argn & 如果我知道进程ID,是否可以写消息到服务器? 像这样的东西将是方便的: echo "quit" > process1234 其中process1234是进程(带有sid 1234)。 游戏服务器不是我写的二进制文件,而是一个Call of Duty二进制文件。 所以我不能改变任何代码。

Linux启动时启动一个进程(Ubuntu)

我有一个进程(Spark聊天客户端),当我的Ubuntu启动时需要运行。 为此,我做了以下工作。 我创build了一个run.sh文件,将启动我的应用程序(我检查它的工作) 我创build了一个从/etc/rc5.d/和/etc/rc3.d/到我的run.sh文件的符号链接。 (一个符号链接也工作正常) 但是当我的机器启动时,我的进程不能启动。 (这是做这件事的方法,还是我在这里做错了什么?) 我在Ubuntu 10.04 LTS(Lucid Lynx)上运行。