Articles of 进程

没有这样的过程 – ptrace

问题陈述 :一个程序C由一个循环组成。 这个程序的执行必须由另一个进程来控制,这个进程会周期性地显示受控进程的进程。 kill(pid, SIGSTOP),函数ptrace(PTRACE_PEEKTEXT,pid,…)不会再findC进程。 从我所读到的, ptrace(PTRACE_PEEKTEXT,pid,… )应该在由pid标识的进程停止时工作。 我不知道我错过了什么,所以任何帮助将不胜感激。 以下是我迄今为止所做的: 有两个进程, P和C. 第一个进程(P)通过fork()创build第二个进程(C ) 。 C的代码是这样的: int i = 0; int main() { ptrace(PTRACE_TRACEME, 0, NULL, NULL); printf("Memory address = %p", (void *)&i); while(1) { i++;} } P的代码如下: {…} switch (pid = fork()) { case 0: /* the child */ if (execl("C", "", (char *) […]

在Linux中如何在同一进程中为线程分配堆栈或内存

对于正常的函数调用,堆栈帧被创build并存储在堆栈中。 但 如何在一个进程内为两个线程分配内存,以及在线程调用其他函数时如何处理栈帧。

当一个进程分叉时,共享库.so仍然在地址空间中吗? 那构造函数会被再次执行吗?

当进程分叉时,subprocess是否在其地址空间中拥有自定义的共享库(.so文件)? 如果是这样,共享库的地址是否与其父进程相同或不同(由于ASLR)? 在主函数__attribute__ ((constructor)) constructor函数之前运行的函数是否会在所有subprocess中再次执行? 什么线程?

我如何调和linux中的“top”和“free -m”的内存使用情况报告?

从免费-m我可以看到有377MB的内存和1649MB的机器上(其中1567由Ubuntu的caching)免费。 请参阅下面的实际输出: caz@riskvm:~$ free -m total used free shared buffers cached Mem: 2026 1975 51 0 30 1567 -/+ buffers/cache: 377 1649 Swap: 3153 87 3065 但是,当我看到顶部的输出,我可以看到RES列中使用1GB和273MB的进程。 RES表示从顶层手册页驻留在未交换的物理内存中。 top – 11:45:26 up 1 day, 38 min, 3 users, load average: 0.27, 0.21, 0.23 Tasks: 125 total, 1 running, 123 sleeping, 0 stopped, 1 zombie Cpu(s): […]

发送命令以使用/ proc进行处理

我有一个应用程序作为一个进程在Ubuntu服务器上运行。 这个应用程序有一个命令行gui,它允许我input一个命令,然后按回车键,命令运行。 我能够编写进程ID的确定。 然后我编写脚本以发送一个命令: # echo "command" > /proc/<PROCESSID>/fd/0 我已经尝试了变化 # echo "command" > /proc/<PROCESSID>/fd/0 # echo -e "command\r" > /proc/<PROCESSID>/fd/0 # echo -e "command\c" > /proc/<PROCESSID>/fd/0 # echo -e "\015" > /proc/<PROCESSID>/fd/0 我知道该程序正在获取命令,但不执行它。 我怀疑这是因为我没有实际按下input,可能命令行正在期待这一点。 有人能告诉我如何使用这个不正确或更好的select?

如何在Linux上用clone()创build一个真正的线程?

我正在尝试使用clone()创build一个新的线程。 用下面的代码(…): #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define _SCHED_H 1 #define __USE_GNU 1 #include <bits/sched.h> #define STACK_SIZE 4096 int func(void *arg) { printf("Inside func.\n"); sleep(1); printf("Terminating func…\n"); return 0; } int main() { printf("This process pid: %u\n", getpid()); char status_file[] = "/proc/self/status"; void *child_stack = malloc(STACK_SIZE); int thread_pid; printf("Creating new thread…\n"); thread_pid = clone(&func, […]

文件在多个进程上

如果我的某个进程打开了一个文件,比方说只读,那么操作系统是否保证在读取时没有其他进程会写入文件,可能会将读取过程留在旧文件版本的第一部分,第二部分更新的文件版本,使数据完整性可疑? 我不是在讨论没有寻求的pipe道,而是在普通的文件中寻求select(至less在只有一个进程打开时)。

限制Linux上的进程内存/ CPU使用率

有没有一种方法来运行一个进程,并限制其内存使用情况来说“X”MB和CPU使用率在Linux中说“Y”Mhz? 我知道我们可以通过使用“nice”命令来调整调度优先级。 但是,手册页并没有说明它是否会限制CPU和内存,或者只限于CPU(无论如何,它不能用于指定绝对限制)。 谢谢, J.P

在Linux上维护长期运行的任务

我的系统包括一个任务,它打开一个networking套接字,接收来自networking的推送数据,处理它,并将其写入磁盘或根据消息ping其他机器。 此任务旨在永久运行,并且该服务旨在使此任务始终运行。 但有时它会崩溃。 保持这样的任务的最佳做法是什么? 假设任务在我们重新启动之前最多可以停留30秒,这是可以的。 一些明显的想法包括有一个看门狗进程,检查以确保进程仍在运行。 看门狗可以由cron触发。 但是如何知道这个过程是否还活着呢? 写一个pidfile? touch心跳文件? 如果机器陷入到看门狗比心跳更快的地步,一个理想的解决scheme不会持续地启动更多的进程。 有这个标准的Linux工具吗? 我可以想象一个使用消息队列的解决scheme,但我不确定这是不是一个好主意。

分叉和pipe道过程c

所以我有一个项目,但我完全难住。 我花了十个小时,没有任何地方。 我不特别想要代码的答案,但一些伪代码和良好的提示在正确的方向将帮助一堆! 它分叉了许多进程,k – 一个由pipe道连接的命令行参数 – 每个进程连接到下一个进程,最后一个进程连接到第一个进程。 进程号码k将其消息发送到进程号(k + 1)%n。 进程0从stdin读取一行。 然后它将它发送到进程1.每个其他进程读取该行,将该string的第一个字节递增1,然后将行中继到下一个进程。 随着中继,它打印一个状态消息(如下所示)。 当消息返回到进程0时,它也输出到标准输出。 当一个进程收到EOF (或者从pipe道,如果它不是一个进程,或者从stdin ,进程0),它打印最后一个string。 这将closures所有pipe道。 预期产出是: $ ./ring 4 hello process #0 (32768) sending message: hello process #1 (32769) relaying message: iello process #2 (32770) relaying message: jello process #3 (32767) relaying message: kello I hear kello ^C $ 我到目前为止写的是: #include […]