Tag: 过程

系统调用如何工作?

我明白,用户可以拥有一个进程,每个进程有一个地址空间(其中包含有效的内存位置,这个过程可以参考)。 我知道一个进程可以调用系统调用并将parameter passing给它,就像任何其他库函数一样。 这似乎表明,所有的系统调用都是通过共享内存等方式进入进程地址空间的。但也许,这只是一个错觉,因为在高级编程语言中,系统调用看起来像任何其他函数,当一个进程调用它。 但是,现在让我进一步深入分析一下底下发生了什么。 编译器如何编译系统调用? 它可能会将进程提供的系统调用名称和参数压入堆栈,然后将汇编指令称为“TRAP”或其他东西 – 基本上就是调用软件中断的汇编指令。 该TRAP汇编指令由硬件执行,首先将模式位从用户切换到内核,然后将代码指针设置为开始中断服务例程。 从这一点开始,ISR以内核模式执行,从堆栈中获取参数(这是可能的,因为内核可以访问任何内存位置,甚至是用户进程拥有的内存位置),并执行系统调用结束放弃CPU,再次切换模式位,用户进程从停止的地方开始。 我的理解是正确的吗? 附上的是我的理解粗略的图表:

如何退出一个subprocess – _exit()与退出

考虑这个代码片段: pid_t cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { // in child execvp(argv[1], argv + 1); perror("execvp"); _exit(EXIT_FAILURE); } // in parent 如果execvp返回,我将如何退出subprocess? 我应该使用exit()还是_exit()?

如何在App Store批准的应用程序中获取有关可用内存和运行进程的信息? (是的,有一个!)

App Store中有一个名为“Activity Monitor Touch”的应用程序,它显示后台进程以及可用内存。 所以必须有一个公共API来访问这些信息。 证据: 我已经在寻找天,但找不到任何好的起点。 这个应用程序如何能够把所有这些东西都拿出来,而不会有任何越狱/黑客攻击等等。 直到最近,我确信在iOS上这样的事情是绝对不可能的。 我发现这个代码片段: – (NSArray *)runningProcesses { int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0}; size_t miblen = 4; size_t size; int st = sysctl(mib, miblen, NULL, &size, NULL, 0); struct kinfo_proc * process = NULL; struct kinfo_proc * newprocess = NULL; do { size += size / 10; […]

用户级和内核支持的线程之间的区别?

我一直在研究基于这个主题的一些笔记,尽pipe我对线程有一般的理解,但我并不确定用户级和内核级线程之间的区别 。 我知道进程基本上是由多个线程或单个线程组成的,但这两个前面提到的types的线程是什么? 据我所知,内核支持的线程可以访问系统调用的内核,而用户级线程则不能使用其他用途。 那么,当用户级线程是由程序员创build的线程时,是否使用内核支持的线程来执行由于其状态而无法正常执行的操作?

获取当前ruby进程的内存使用情况

我想格式化我的Logger输出,以包括当前的内存使用情况,作为一个长期运行的过程的一部分。 有没有什么内置的Ruby为此,有点像PHP的memory_get_usage() ? 或者我必须执行一些shell命令从ps ?

如何将Visual Studio附加到尚未启动的进程?

我有.NET程序,无法运行从Visual Studio出于某种原因(从Excel 2010模板项目创build的Excel文件),我需要debugging启动事件。 如果我想debugging程序初始化之后发生的事件,则不会有任何问题。 我从资源pipe理器中运行该程序,将该进程附加到Visual Studio并在代码中添加一些断点。 但是在这里,我需要在启动事件中join断点。 我需要的是能够附加进程Visual Studio不依赖于一个PID,但在一个特定的进程名称或任何其他解决scheme将工作。 当然,在我的启动事件中添加一个Thread.Sleep(1000) ,给我一些时间来在Visual Studio中附加进程是没有问题的! 谢谢。

如何在Windows中暂停/恢复进程?

在Unix中,我们可以临时暂停一个进程的执行,并用SIGSTOP和SIGCONT信号恢复进程。 我如何在没有编程的情况下暂停Windows中的单线程进程?

如何在Windows中自动销毁subprocess?

在C ++ Windows应用程序中,我启动了几个长时间运行的subprocess(目前我使用CreateProcess(…)来执行此操作。 如果我的主进程崩溃或closures,我想要subprocess自动closures。 由于需要这个“父”的崩溃的工作,我相信这需要使用操作系统的某些API /function来完成。 这样所有的“孩子”过程都被清理了。 我该怎么做呢?

如何在Powershell中将输出捕获到外部进程的variables中?

我想运行一个外部进程,并将其命令输出捕获到Powershell中的variables。 我目前正在使用这个: $params = "/verify $pc /domain:hosp.uhhg.org" start-process "netdom.exe" $params -WindowStyle Hidden -Wait 我已经确认该命令正在执行,但我需要捕获输出到一个variables。 这意味着我不能使用-RedirectOutput,因为这只会redirect到一个文件。

线程vs Linux中的进程

我最近听到一些人说,在Linux中,使用进程而不是线程几乎总是比较好,因为Linux在处理进程方面非常高效,并且因为与线程相关联的问题太多(如locking)。 但是,我很怀疑,因为在某些情况下线程似乎可以带来相当大的性能提升。 所以我的问题是,当遇到线程和进程可以很好处理的情况时,我应该使用进程还是线程? 例如,如果我正在编写Web服务器,是否应该使用进程或线程(或组合)?