Articles of 进程

_do_fork()如何返回两个不同的PID(一个用于父进程,一个用于subprocess)

我正在查看_do_fork()函数()试图了解fork()如何返回父进程的子PID和subprocess0。 我认为nr包含subprocess的PID(这将返回给调用者进程),但我不能看到它是如何能够返回0的subprocess。 答案如何fork()知道什么时候返回0? 说,返回值是在为新进程创build的堆栈上传递的,但是(除了没有真正理解它) 我无法在代码中find它 。 那么, 哪里的subprocess的返回值是0? _do_fork()函数的代码复制如下: long _do_fork(unsigned long clone_flags, unsigned long stack_start, unsigned long stack_size, int __user *parent_tidptr, int __user *child_tidptr, unsigned long tls) { struct task_struct *p; int trace = 0; long nr; /* * Determine whether and which event to report to ptracer. When * called from kernel_thread or […]

如何从Linux的其他terminal访问在一个terminal上运行的进程?

我想知道这个过程,以便我可以访问或从terminal获取在Linux的其他terminal上运行的进程的控制权。 两个terminal属于同一个系统。

如何在Linux CPU,内存和时间监视进程

我如何在Linux中对一个进程进行基准testing? 我需要像“顶”和“时间”这样的特定进程名称(这是一个多进程程序,所以会给出很多PID)? 此外,我想有这些过程的内存和CPU使用时间的阴谋,而不只是最终的数字。 有任何想法吗?

Python的subprocesspopen死锁

我有一个问题,popen是僵局。 具体来说,运行popen的线程(不是主线程)被卡在: File: "/usr/lib/python2.7/subprocess.py", line 679, in __init__ errread, errwrite) File: "/usr/lib/python2.7/subprocess.py", line 1224, in _execute_child data = _eintr_retry_call(os.read, errpipe_read, 1048576) File: "/usr/lib/python2.7/subprocess.py", line 478, in _eintr_retry_call return func(*args) 用ps,我可以看到python进程已经分叉了,但是它还没有运行os.execvp。 这可以通过检查ps看到,在那里我看到我的主进程有一个同名的subprocess。 杀死该进程会导致父级中卡住的线程恢复。 据我所知,subprocess(这将execvp)locking在创build和运行os.execvp之间的50行中的某个地方。 使问题复杂化,这是非常罕见的。 可能有100个popen。 这个locking怎么会发生? 我如何解决它? (我不能在一个简单的python程序中重现这种行为)。 我应该注意到,虽然这个程序是令人难以置信的multithreading(数百个线程运行),没有其他线程分叉或使用popen。 虽然许多其他线程正在处理文件描述符(主要是套接字)。 技术说明: 在Amazon EC2上运行 在Ubuntu 11.10中的Linux 3.0.0-14-x86_64 python 2.7.2解释器。 使用包括paramiko和博托几个库

万无一失的跨平台进程kill守护进程

我有一些python自动化,它产生了我使用linux script命令logging的telnet会话; 每个日志logging会话都有两个script进程ID(父代和子代)。 我需要解决一个问题,如果Python自动化脚本死亡, script会话不会自行closures; 由于某种原因,这比实际上要困难得多。 到目前为止,我已经实现了watchdog.py (参见问题的底部),该守护进程自我守护,并在循环中轮询python自动化脚本的PID。 当它看到Python自动化PID从服务器的进程表中消失时,它将尝试终止script会话。 我的问题是: script会话总是产生两个独立的进程,其中一个script会话是另一个script会话的父节点。 如果我从自动化脚本启动script会话, watchdog.py 将不会终止子script会话(请参见下面的AUTOMATION示例 ) 自动化示例( reproduce_bug.py ) import pexpect as px from subprocess import Popen import code import time import sys import os def read_pid_and_telnet(_child, addr): time.sleep(0.1) # Give the OS time to write the PIDFILE # Read the PID in the PIDFILE fh […]

堆的界限是什么?

给定过程中堆的界限是什么? 我明白,这个问题可能没有简单的答案,所以我特别感兴趣的答案如下: 在AMD64的Linux下,是否有标准堆大小/位置的64位进程? 如果我正在实现一个语言运行时,我怎么能find我不允许堆的地方(再次,Linux / AMD64) 有没有一种便捷的方式来查找应用程序的开始/结束位置?

杀死进程并等待进程退出

当我从我的bash脚本启动我的tcp服务器时,我需要在当前实例开始侦听之前终止先前的实例(可能仍在侦听同一个端口)。 我可以使用像pkill <previous_pid>东西。 如果我理解正确,这只是发送SIGTERM到目标PID。 当pkill返回时,目标进程可能仍然活着。 有没有办法让pkill等到它退出?

从“ps”获得完整结果

如何获得* nix命令“ ps ”的全宽结果? 我知道我们可以指定类似–cols 1000但无论如何,我可以列,只是打印出一切?

杀死django开发服务器的适当信号

我试图发送一个信号到django开发服务器来杀死父进程和subprocess。 $ python manage.py runserver Validating models… 0 errors found Django version 1.4.1, using settings 'myproject.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C. $ ps axf 26077 pts/12 Ss 0:00 \_ -bash 4189 pts/12 S+ 0:00 | \_ python manage.py runserver 4194 pts/12 Sl+ 0:00 | \_ /myproject/.virtualenv/bin/python manage.py runserver $ […]

Linux内核:线程与进程 – task_struct vs thread_info

我读过Linux不支持线程或轻量级进程的概念,并认为内核线程就像任何其他进程一样。 但是这个原则在代码里面并不是很准确。 我们看到task_struct保存一个进程的状态信息(如果错误,请纠正我)以及thread_info追加到进程内核堆栈的底部。 现在的问题是,为什么代码支持通过thread_info单独线程的概念,当linux应该像任何其他进程解释线程? 请让我知道我在这里失踪 – 我是一个Linux内核开发新手。