Articles of 进程

为什么我们在启动jvm时指定最小和最大堆内存

可能重复: 为什么(Sun)JVM具有固定的内存使用上限(-Xmx)? JVM应该像任何其他进程一样,在一个正常的过程中,我们没有指定可用的最大内存,对于32位操作系统来说这个限制是4GB,等等。 那么为什么在JVM中它不那么简单,JVM可以根据需要使用最大内存来存储堆内存以及本地内存。 只是一个猜测,如果JVM知道可用的最大堆内存,是否会使事情变得更有效率? 它是如何工作的?

linux迁移过程中cpu的使用率是如此之高,为什么?

我发现我的Linux服务器的CPU使用率是如此之高。 看下面的内容(ps aux | grep migration): root 6 99.8 0.0 0 0 ? S Aug19 48073:37 [migration/0] root 8 98.0 0.0 0 0 ? S Aug19 47192:14 [migration/1] root 13 98.3 0.0 0 0 ? S Aug19 47355:41 [migration/2] root 17 98.4 0.0 0 0 ? S Aug19 47382:40 [migration/3] root 21 97.9 0.0 0 […]

应用程序终止,多个嵌套的subprocess

我有一个python应用程序(并行)产生subprocess(主要是bash脚本)。 一些脚本可能会调用其他脚本。 我试图找出最好的方法来处理应用程序和subprocess的终止边界情况。 如果应用程序需要退出或收到一个SIGTERM ,那么它应该终止( SIGTERM , wait , SIGKILL )所有的subprocess和它们创build的进程。 一个方法是开始一个新的进程组,杀死进程组作为终止( killpg )的一部分。 如果任何subprocess比指定的时间更长,我想杀死它们以及它们创build的subprocess。 这里的一个方法是将应用程序设置为一个进程组领导,这样我就可以杀死这个组,并依靠它来杀死其他的subprocess。 困难的是这两个解决scheme相互冲突,所以我似乎只能满足一个要求。 所以,最后的想法是使用tcsetpgrp,但我不太熟悉它。 所以,像模拟一个交互式terminal。 这意味着杀死应用程序会向所有进程发送一个SIGHUP (我认为),并且我可以使用进程组来pipe理耗时过长的subprocess。 这是一个好主意,还是有其他的build议,我失踪了? 奖金部分:如果应用程序是通过SIGKILL杀死的(在这个应用程序中偶尔需要,是的,我知道SIGKILL应该避免,等等…),这将是惊人的,有杀死subprocess以及相同的方式bash退出时向其进程发送一个SIGHUP 。

使用fifos和链接来控制网页的远程过程(Linux)

我在linux服务器上使用mpg123,我试图通过网页(apache)控制它,使用链接发送不同的控件。 mpg123有-C标志,所以你可以发送字符到它。 “s”键=开始/停止,“f”键=下一首曲目…等等。 我想我可以用fifo发送mpg123这些密钥,将mpg123 stdin改为fifo stdout,但是我不知道如何在这种情况下使用fifo(如何让mpg123“听”另一个stdin)。 我所做的是: mkfifo myfifo myfifo | mpg123 -C -@ musiclist.txt And then I've created keys.txt adding some keys to the file: echo "f" >> keys.txt echo "s" >> keys.txt 然后: cat keys.txt >> myfifo.fifo 这不起作用。 有人可以解释我可以使用fifos将消息传递给正在运行的mpg123吗? 我GOOGLE了,但无法find我想要的。 这个问题似乎给了我一些亮点,但是我仍然不知道如何让mpg123听取fifo的输出。 先谢谢你,

使用gcc -m32标志找不到-lgcc和-lgcc_s

我想在我的64位Linux上编译一个32位汇编代码(NASM),但我不能,我已经尝试了其他的教程,并且我安装了ia32-libs … 当我尝试运行它为: gcc asm1.o -o asm1 文件input“asm1.o”的i386与输出i386:x86-64不兼容 当我尝试运行它: gcc -m32 asm1.o -o asm1 / usr / bin / ld:无法find-lgcc / usr / bin / ld:connot查找-lgcc_s collect2:错误:ld返回1退出状态 感谢您的帮助。 OBS:对不起我的英文,我不是来自美国。

ptrace suid进程(掉之后)

我明白,我们不能对suid二进制文件进行跟踪。 然而,我想知道为什么我们不能在二进制文件放弃使用uid而不使用euid之后再执行ptrace。 例如,在二进制文件中,suid二进制文件在执行一些步骤后会丢弃权限。 seteuid (euid); /* euid was obtained by geteuid() */ ret_chdir = chdir (path); seteuid (ruid); /* ruid was obtained by getuid() */ system("whoami"); printf("Enter any char"); scanf("%c", &junk); 在我打印“whoami”的情况下,它是进程的用户名,但不是进程的所有者。 当程序正在等待垃圾邮件input时,我试图以uid作为用户名附加到正在运行的进程,但即使二进制文件已经放弃了该特权,但仍然失败。 ptrace attach是否可能使用saved-uid状态来决定我不是所有者?

我怎样才能找出进程开始的原始用户名?

有一个perl脚本需要以root身份运行,但是我们必须确保运行脚本的用户最初不以用户“foo”login,因为它将在脚本中被删除。 那么我怎么才能知道,自从login后可能有多次被盗用的用户是否在该链中的任何时间都没有假冒“foo”呢? 我find了一个有趣的Perl脚本,它调用了以下两个shell脚本,但是我认为这只能在Solaris上运行。 my $shell_parent = `ps -ef | grep -v grep | awk \'{print \$2\" \"\$3}\' | egrep \"^@_\" | awk \'{print \$2}'`; my $parent_owner = `ps -ef | grep -v grep | awk \'{print \$1\" \"\$2}\' | grep @_ | awk \'{print \$1}\'`; 这需要在Linux和Solaris上都能正常工作,而且我宁愿消除对shell的反复调用,而把整个事情放在Perl中。

一个进程的内存量如何确定?

根据我的理解,当一个进程正在执行时,它有一定的内存可供处理。 随着堆栈大小的增加,它从进程的一端build立(不考虑堆栈之前的全局variables),而堆从另一端build立。 如果你继续添加堆栈或堆,最终所有的内存都将用完这个过程。 如何确定进程的内存量? 我只能想象它取决于一堆不同的variables,但一般尽可能的反应会很好。 如果事情必须具体说明,我对使用C ++编写的linux进程感兴趣。

Java Process.Destroy()不会终止所有进程

我有一个使用Runtime.getRuntime()。exec(“myBin”)启动程序的Java进程 这个“myBin”可能会分叉几次来完成它的工作。 我有一个阅读器线程从exec()返回的Process对象的InputStream和ErrorStream中读取“myBin”及其子元素的所有输出, 我的问题是:如果完成这个工作需要太多的时间,我需要杀死这个进程并等待读者线程完成(如果读取EOF的话,线程将完成) 现在我发现,即使我使用Process.Destroy(),我只能杀死自己和它的所有孩子的“myBin”insead。 所以超时后,EOF永远不会到达,所以读者线程挂起,直到所有的subprocess终止… 有没有办法安全杀死进程和Runtime.exec()启动的所有孩子 我在Linux上,跨平台不在我心中。

find一个正在破坏我的过程的神秘过程

假设我有一些进程 – 在这种情况下是一个由ant启动的Java进程。 我发现随机的东西是发送这个Java进程SIGTERM。 这可能是将信号发送给自己的过程,也可能是其他的东西。 我已经消除了大部分显而易见的原因(OOM杀手,父进程杀死孩子等),但我真的想知道是谁在发送这个SIGTERM进程。 任何方式来跟踪在操作系统或进程级别的这种行为?