Questions tagged «process»

进程是正在执行的计算机程序的实例。

1
是否可以知道剪贴板的来源(应用程序)?
我注意到有时如果关闭了源应用程序(从中复制了内容的应用程序),剪贴板中的内容将不可用。 这使我想知道是否有可能知道源应用程序是什么(例如通过PID)。 为什么?如果源应用程序是终端,则在复制的内容是相对路径的情况下,我想找到终端的工作目录,以构建文件的完整路径。 仅供参考,我目前正在使用xclip确定剪贴板内容,例如 xclip -selection primary -t STRING -o 2> /dev/null
10 x11  process  clipboard  xclip 

2
在创建进程时打印进程的pid和名称
从这里的问题开始,OP希望重复轮询pidofshell脚本中使用的进程的pid 。当然,这效率很低,因为必须pidof每秒多次为该程序启动一个新进程(我不知道这是问题中CPU峰值的原因,但似乎很可能)。 通常,在Shell脚本中解决此类问题的方法是使用单个程序输出所需的数据stdout,然后在必要时进行一些文本处理。尽管这涉及到更多的程序要同时运行,但由于没有为轮询目的而不断创建新进程,因此它可能占用较少的CPU资源。 因此,对于上述问题,一个解决方案可能是拥有一些程序,该程序在创建过程时输出过程的名称和pid。然后,您可以执行以下操作: pids-names | grep some_program | cut -f 2 | while read pid; do process-pid "$pid" done 这样做的问题是,它提出了一个更基本的问题,如何在创建pid和进程名称时将它们打印出来? 我发现了一个名为的程序ps-watcher,尽管存在的问题是它只是一个perl反复运行的脚本,ps因此并不能真正解决问题。另一个选择是使用auditd,如果直接通过来处理日志,则可能会起作用tail -f。理想的解决方案比这更简单,更易于移植,但是auditd如果它是最佳选择,我将接受一个解决方案。

2
我如何创建一个难以终止的过程
我想创建一个一旦启动(具有root特权)就很难停止的程序(即使对于管理员而言)。一旦启动,该过程应在启动时继续自行启动,直到要求停止为止。停止过程应花费一些时间(即应该很昂贵)。 我知道这听起来像是恶意软件,但出于真正的原因,我想要它。我想在我的笔记本电脑(我是管理员)上运行站点阻止程序。我想让我自己很难阻止他们。 我想到的解决方案如下: 每次运行时,进程都应使用不同的名称运行,这样我就无法预测进程名称并杀死它。 进程在关闭时将自身保存在/etc/rc5.d中 该过程将在某个已知位置使用密码来加密其名称。停止过程将必须使用bruteforce来恢复程序名称并杀死它。 我想为此任务找到一个好的解决方案。
10 security  process  kill 

2
每个进程都有一个当前目录是什么意思?
我正在阅读“ Unix编程环境”,但我不理解当前的进程目录。 每个进程都有一个当前目录,除非所有文件名都直接以斜杠开头,否则所有文件名都隐式假定以该目录的名称开头。 这是否意味着每个进程都有一个在其创建目录中的标志?例如,如果/bin/sed从中调用了program /home/rene,则通过调用sed创建的进程具有当前目录/home/rene?
10 process 

1
交互式外壳在孤立的流程组中应该做什么?
(根据/programming/13718394/what-should-interactive-shells-do-in-orphaned-process-groups中的建议在UNIX中重新发布) 简短的问题是,如果外壳程序位于不拥有tty的孤立进程组中,它应该怎么办?但我建议阅读冗长的问题,因为这很有趣。 这是一种有趣且令人兴奋的方法,可以使用您喜欢的外壳将笔记本电脑变成便携式太空加热器(除非您是那些tcsh怪人之一): #include <unistd.h> int main(void) { if (fork() == 0) { execl("/bin/bash", "/bin/bash", NULL); } return 0; } 这导致bash将CPU固定在100%。zsh和fish的作用相同,而ksh和tcsh则对工作控制含糊其辞,然后再进行龙骨化处理,这虽然好一些,但效果不明显。哦,这是与平台无关的违规者:OS X和Linux都受影响。 我的解释(可能是错误的)如下:子外壳检测到它不在前台:tcgetpgrp(0) != getpgrp()。因此,它试图停止自身:killpg(getpgrp(), SIGTTIN)。但是它的进程组是孤立的,因为它的父级(C程序)是领导者并死亡,并且SIGTTIN发送给孤立进程组的操作只是被丢弃(否则什么也无法再次启动它)。因此,子外壳并没有停止,但是它仍然在后台,因此马上就可以再次执行所有操作。冲洗并重复。 我的问题是,命令行外壳程序如何检测到这种情况?正确的做法是什么?我有两个解决方案,都不是理想的: 尝试通知其pid与我们的组ID匹配的进程。如果使用失败ESRCH,则表明我们很可能成为孤儿。 尝试从中无阻塞读取一个字节/dev/tty。如果使用失败EIO,则表明我们很可能成为孤儿。 (我们跟踪此问题的是https://github.com/fish-shell/fish-shell/issues/422) 感谢您的想法!


4
如何查看命令组(而不是进程)的摘要内存使用情况
使用top / htop之类的工具时,是否可以将类似的流程分组?有时我只想知道什么在消耗我的内存,而某些程序(大多数是浏览器)正在使用多个进程,这使得很难读取它们真正使用了多少RAM。 到目前为止,我只想到了这样的东西: ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc
10 process  top 

1
Linux上的PCB在哪里
PCB或过程控制块在Wikipedia上定义如下 进程控制块(PCB,也称为任务控制块,[1] Task Struct或Switchframe)是操作系统内核中的数据结构,其中包含管理特定进程所需的信息。PCB是“操作系统中进程的体现” 其职责是: Process identification data Processor state data Process control data 那么在哪里可以找到工艺的PCB?
10 linux  process  cpu 

1
了解长时间运行进程的ps经过时间格式
我在ps练习中使用命令来识别运行时间超过给定阈值的进程。 我正在使用以下模板来获取已知流程命令的经过时间: ps -eo etime,command | grep <something to identify a process> | grep -v grep | awk '{print $1}' 我注意到,对于运行时间较短的进程,etime(经过的时间)值采用格式minutes:seconds,因此,我可以轻松地确定进程运行了多长时间。 对于运行时间非常长的进程(几天之久),我不了解其格式。 我有一个MySQL服务器进程,htop显示已运行126个小时。 执行ps -eo etime,command | grep mysql | grep -v grep | awk '{print $1}'给出的值为9-03:35:32。 我最好的猜测是,这意味着9个小时,3小时35分钟32秒。我不知道9的单位是多少。 该过程已运行126个小时,约5.25天。这表明以上输出中的9不代表天。他们也不可以是半天,因为(9 * 12)小时+ 3小时+ 35分钟+ 32秒少于5天。 如何解释长时间运行的进程所经过的时间值?以上输出中的9伴随什么单位?
10 process  time  ps 

4
简单的排队系统?
对于商用PC,我们想使用它在24小时不间断的后台执行某些任务。 基本上,我们希望有以下命令: add-task *insert command here* list-tasks remove-task(s) 添加的任务只需放在队列中,然后在后台一个接一个地执行(退出shell后继续运行)。 有没有执行此操作的简单脚本/程序?

1
是内核线程进程和守护程序吗?
从Mauerer的Linux内核体系结构中, 内核线程是由内核本身直接启动的进程。他们将内核函数委派给一个单独的进程,并在其中与系统中的其他进程“并行”执行(实际上,与内核本身的执行并行)。内核线程通常称为(内核)守护程序。它们用于执行例如以下任务: 定期将修改的内存页面与页面所源自的块设备同步(例如,使用mmap映射的文件)。 如果很少使用内存页,则将其写入交换区域。 管理延迟的操作。 为文件系统实现事务日志。 基本上,内核线程有两种类型: 类型1-线程启动并等待直到内核请求执行特定操作为止。 类型2 —类型一旦启动,线程就会定期运行,检查特定资源的利用率,并在利用率超过或低于设置的限制值时采取措施。内核使用这种类型的线程进行连续监视任务。 由于Mauerer的书说内核线程是进程,所以我认为它们必须在用户模式而不是内核模式下运行。(或者我错了吗?一个进程可以在不同时间以用户模式或内核模式运行,还是只能以一种模式运行?) 但是Bovet的《了解Linux内核》指出,内核线程仅在内核模式下运行(请参见下面的引用)。两本书中的“内核线程”的概念是否相同? 传统的Unix系统将一些关键任务委托给间歇性运行的进程,包括刷新磁盘缓存,换出未使用的页面,为网络连接服务等。实际上,以严格的线性方式执行这些任务并不高效。如果将它们安排在后台,则它们的功能和最终用户流程都将获得更好的响应。由于某些系统进程仅在内核模式下运行,因此现代操作系统将其功能委托给内核线程,而内核线程不会受到不必要的用户模式上下文的阻碍。在Linux中,内核线程在以下方面与常规进程不同: 内核线程仅在内核模式下运行,而常规进程在内核模式和用户模式下交替运行。 由于内核线程仅在内核模式下运行,因此它们仅使用大于PAGE_OFFSET的线性地址。另一方面,常规过程在用户模式或内核模式下都使用全部四个千兆字节的线性地址。 Mauerer的书说内核线程是直接由内核启动的,似乎还说守护程序是内核线程的同义词。因此,我认为守护程序必须直接由内核启动。 但是https://unix.stackexchange.com/a/193918/674说,screen的守护进程是通过screen用户界面启动的(请参见下面的引用)。我认为screen用户界面是一个过程,而不是内核。是的概念daemon在Mauerer的书,并在链接的答复同一个概念? 首次启动时screen,实际上是在启动用户界面(ui),默认情况下会创建一个守护程序(会话管理器)。 通常,您如何理解“内核线程”,“进程”和“守护程序”的概念,它们之间的关系和差异?


4
确定运行进程的特定处理器
我可以访问Linux集群的8核节点。登录到节点后,可以使用以下命令查看处理器列表: more /proc/cpuinfo 在我的8核心节点中,处理器的编号从0到7。每个处理器都是Intel Xeon CPU(E5430 @ 2.66GHz)。 现在假设我foo使用一些参数调用该程序args: foo args 该程序foo需要很长时间才能执行(例如,数小时或数天)。调用foo完,是否可以确定正在运行的特定处理器(即0到7)foo?该top程序向我显示了进程ID和类似信息,但是没有看到处理器编号。有这样的信息吗?
10 linux  process  cpu  top 


2
如何使在相同管道中读取和写入相同文件始终“失败”?
说我有以下脚本: #!/bin/bash for i in $(seq 1000) do cp /etc/passwd tmp cat tmp | head -1 | head -1 | head -1 > tmp #this is the key line cat tmp done 在关键行上,我读写同一文件tmp,有时会失败。 (我读这是因为竞争条件,因为管道中的进程是并行执行的,我不明白为什么-每个进程都head需要从上一个进程中获取数据,不是吗?这不是我的主要问题,但您也可以回答。) 当我运行脚本时,它输出大约200行。有什么方法可以强制此脚本输出始终为0行(因此tmp始终首先准备对I / O重定向,因此始终破坏数据)?需要明确的是,我的意思是更改系统设置,而不是更改此脚本。 感谢您的想法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.