我正在使用 Debian 伸展 (systemd)。我在前台使用运行 rsyslog 守护进程
/usr/sbin/rsyslogd -n
,我做了一个Ctrl+Z来停止它。进程状态更改为Tl(已停止、已线程)。我向进程发出了多个命令,进程的状态是相同的:. 一旦我做了一个,它就死了。我有3个问题。kill -15 <pid>Tlfg
SIGSTOP-ed 进程没有响应SIGTERM?为什么内核让它保持在相同的状态?SIGCONT信号的那一刻就被杀死了?SIGTERM信号,那么在进程恢复之前它会保存在哪里?我使用 Ubuntu Server 10.10,我想看看正在运行哪些进程。我知道 PostgreSQL 正在我的机器上运行,但我无法使用toporps命令看到它,所以我假设它们没有显示所有正在运行的进程。难道还有其他的命令,它会显示所有正在运行的进程或有任何其他参数,我可以使用top或ps用于本?
我正在尝试构建一个流程容器。容器会触发其他程序。例如 - 使用 '&' 启动运行后台任务的 bash 脚本。
我所追求的重要特性是:当我杀死容器时,它下面产生的所有东西都应该被杀死。不仅是直系子女,还有他们的后代。
当我开始这个项目时,我错误地认为当你杀死一个进程时,它的孩子也会自动被杀死。我曾向有同样错误想法的人寻求建议。虽然有可能捕捉到信号并将杀戮传递给儿童,但这不是我在这里要寻找的。
我相信我想要实现的目标,因为当你关闭一个 xterm 时,它里面运行的任何东西都会被杀死,除非它被 nohup'd。这包括孤立进程。这就是我想要重新创建的。
我有一个想法,我正在寻找的内容涉及 unix 会话。
如果有一种可靠的方法来识别进程的所有后代,那么能够向它们发送任意信号也会很有用。例如SIGUSR1。
ps和top命令有什么区别?我看到两者都可以显示有关正在运行的进程的信息。什么时候应该使用哪一个?
在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 …
我正在尝试编写一个脚本来终止在特定端口上运行的服务。这是我的脚本:
a=$(ps ax | grep 4990 | grep java | awk '{print $1}')
kill -9 $a
Run Code Online (Sandbox Code Playgroud)
这是一个java程序。这个脚本有时有效,但大多数时候神秘地失败。
有没有其他方法可以杀死在端口上运行的服务?我的端口是4990.
这里有一些关于在进程完成/退出时收到警报的问题和答案 ( 1 , 2 ) - 但这些都假设用户自己发出了所述进程,因此可以使用内置于管理脚本,或通过管道将进程传递给某种警报。
我的情况是,我希望收到用户未初始化的进程完成/退出的警报。也就是说,我在 Ubuntu 12.04 LTS 服务器上批量处理大量视频文件。对这些文件的某些操作需要很长时间,所以当特定的一个完成时,我想要某种警报(电子邮件会很棒)。他们花费的时间太长了,基于 PIT 一次性地、手动地执行此操作是完全没问题的。
为了提供更多信息——假设我正在处理一个特别大的文件,我看到它已经发展到一个 FFMPEG 脚本,这个过程本身就是一个 python 脚本(这非常复杂,不是我自己写的,还有一些东西)我不想修改——尽管这将是第一个合乎逻辑的方法)。我想象发出一个命令或脚本,并以所述正在运行的 python 脚本的 PID 作为参数,当具有该 PID 的进程不再运行时,警报脚本会做它的事情。
有任何想法吗?
Linux 实际上并不区分进程和线程,而是将两者都实现为一种数据结构task_struct。
那么,Linux 为某些程序提供了什么来让它们从子进程中区分进程的线程?例如,有没有办法查看进程在 Linux 中拥有的所有线程的详细信息?
谢谢。
我正在尝试学习 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() 调用之后,子进程从哪里开始执行?
这是情况。我把我的电脑留在家里,从 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权限。