标签: process

为什么我不能用 SIGTERM 杀死一个 SIGSTOP 的进程,挂起的信号存储在哪里?

我正在使用 Debian 伸展 (systemd)。我在前台使用运行 rsyslog 守护进程 /usr/sbin/rsyslogd -n ,我做了一个Ctrl+Z来停止它。进程状态更改为Tl(已停止、已线程)。我向进程发出了多个命令,进程的状态是相同的:. 一旦我做了一个,它就死了。我有3个问题。kill -15 <pid>Tlfg

  • 为什么SIGSTOP-ed 进程没有响应SIGTERM?为什么内核让它保持在相同的状态?
  • 为什么它在收到SIGCONT信号的那一刻就被杀死了?
  • 如果是因为之前的SIGTERM信号,那么在进程恢复之前它会保存在哪里?

process kill signals

26
推荐指数
2
解决办法
7698
查看次数

如何查看正在运行的进程?

我使用 Ubuntu Server 10.10,我想看看正在运行哪些进程。我知道 PostgreSQL 正在我的机器上运行,但我无法使用toporps命令看到它,所以我假设它们没有显示所有正在运行的进程。难道还有其他的命令,它会显示所有正在运行的进程或有任何其他参数,我可以使用topps用于本?

process monitoring process-management

25
推荐指数
1
解决办法
22万
查看次数

进程后代

我正在尝试构建一个流程容器。容器会触发其他程序。例如 - 使用 '&' 启动运行后台任务的 bash 脚本。

我所追求的重要特性是:当我杀死容器时,它下面产生的所有东西都应该被杀死。不仅是直系子女,还有他们的后代。

当我开始这个项目时,我错误地认为当你杀死一个进程时,它的孩子也会自动被杀死。我曾向有同样错误想法的人寻求建议。虽然有可能捕捉到信号并将杀戮传递给儿童,但这不是我在这里要寻找的。

我相信我想要实现的目标,因为当你关闭一个 xterm 时,它里面运行的任何东西都会被杀死,除非它被 nohup'd。这包括孤立进程。这就是我想要重新创建的。

我有一个想法,我正在寻找的内容涉及 unix 会话。

如果有一种可靠的方法来识别进程的所有后代,那么能够向它们发送任意信号也会很有用。例如SIGUSR1。

process signals fork container

25
推荐指数
4
解决办法
2万
查看次数

ps 和 top 命令有什么区别?

pstop命令有什么区别?我看到两者都可以显示有关正在运行的进程的信息。什么时候应该使用哪一个?

process top ps process-management command

25
推荐指数
4
解决办法
6万
查看次数

kill 0 实际上是做什么的?

man page,它说:

kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
 pid... Specify the list of processes that kill should signal.  Each pid can be one of five things:
          0      All processes in the current process group are signaled
Run Code Online (Sandbox Code Playgroud)

我在 bash 中尝试这样:

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man
Run Code Online (Sandbox Code Playgroud)

这里0用作pid. 据我了解,kill 0将杀死当前进程中的所有进程,其中包括pid15247 …

process kill process-groups

25
推荐指数
1
解决办法
2万
查看次数

杀死在特定端口运行的任何服务

我正在尝试编写一个脚本来终止在特定端口上运行的服务。这是我的脚本:

a=$(ps ax | grep 4990 | grep java | awk '{print $1}')
kill -9 $a
Run Code Online (Sandbox Code Playgroud)

这是一个java程序。这个脚本有时有效,但大多数时候神秘地失败。

有没有其他方法可以杀死在端口上运行的服务?我的端口是4990.

process kill tcp

25
推荐指数
2
解决办法
14万
查看次数

运行过程完成时发出警报

这里有一些关于在进程完成/退出时收到警报的问题和答案 ( 1 , 2 ) - 但这些都假设用户自己发出了所述进程,因此可以使用内置于管理脚本,或通过管道将进程传递给某种警报。

我的情况是,我希望收到用户未初始化的进程完成/退出的警报。也就是说,我在 Ubuntu 12.04 LTS 服务器上批量处理大量视频文件。对这些文件的某些操作需要很长时间,所以当特定的一个完成时,我想要某种警报(电子邮件会很棒)。他们花费的时间太长了,基于 PIT 一次性地、手动地执行此操作是完全没问题的。

为了提供更多信息——假设我正在处理一个特别大的文件,我看到它已经发展到一个 FFMPEG 脚本,这个过程本身就是一个 python 脚本(这非常复杂,不是我自己写的,还有一些东西)我不想修改——尽管这将是第一个合乎逻辑的方法)。我想象发出一个命令或脚本,并以所述正在运行的 python 脚本的 PID 作为参数,当具有该 PID 的进程不再运行时,警报脚本会做它的事情。

有任何想法吗?

bash process top htop

25
推荐指数
4
解决办法
2万
查看次数

Linux 如何区分线程和子进程?

Linux 实际上并不区分进程和线程,而是将两者都实现为一种数据结构task_struct

那么,Linux 为某些程序提供了什么来让它们从子进程中区分进程的线程?例如,有没有办法查看进程在 Linux 中拥有的所有线程的详细信息?

谢谢。

linux process thread

25
推荐指数
2
解决办法
7972
查看次数

在 fork() 之后,子进程从哪里开始执行?

我正在尝试学习 UNIX 编程,但遇到了一个关于 fork() 的问题。我知道 fork() 创建了一个与当前正在运行的进程相同的进程,但是它从哪里开始呢?例如,如果我有代码

int main (int argc, char **argv)
{
    int retval;
    printf ("This is most definitely the parent process\n");
    fflush (stdout);
    retval = fork ();
    printf ("Which process printed this?\n");

    return (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

这绝对是父进程
哪个进程打印了这个?
哪个过程打印了这个?

我认为这fork()会创建一个相同的过程,所以我最初认为在该程序中,该fork()调用将永远递归调用。我猜是fork()fork()通话后从头创建的新进程?

如果我添加以下代码,以区分父进程和子进程,

if (child_pid = fork ()) printf ("This is the parent, child pid is %d\n", child_pid);
else printf ("This is the child, pid is %d\n",getpid ());
Run Code Online (Sandbox Code Playgroud)

在 fork() 调用之后,子进程从哪里开始执行?

process c fork api

24
推荐指数
2
解决办法
3万
查看次数

查看另一个 pts 的标准输出

这是情况。我把我的电脑留在家里,从 2TB 硬盘驱动器到另一个 2TB 硬盘驱动器进行 rsync(这需要一段时间,因为它们都是 USB 2.0)。我现在正在工作,并且已通过 ssh 连接到我的家用电脑。如果我这样做,ps aux | grep rsync我可以看到以下内容:

1000  7214 18.8  0.1  30636  1368 pts/0 S+   00:52 134:00 rsync -vr /media/master /media/slave
Run Code Online (Sandbox Code Playgroud)

但是我想看看 rsync 到底在做什么。当我在家时,标准输出显示在我的终端中,rsync 的详细模式显示当前正在复制哪些文件。有没有办法读取另一个pts的stdout?

$ ps -t pts/0
7214 pts/0    02:14:42 rsync
Run Code Online (Sandbox Code Playgroud)

我做了一点谷歌搜索,似乎/proc/pid/fd可以找到答案,但我不确定这一点......

PS我当然有sudo权限。

process terminal io-redirection rsync

24
推荐指数
3
解决办法
4万
查看次数