Messages in this thread Patch in this message | | | From | Roman Gushchin <> | Subject | [RESEND] proc, coredump: add CoreDumping flag to /proc/pid/status | Date | Wed, 20 Sep 2017 16:06:34 -0700 |
| |
Right now there is no convenient way to check if a process is being coredumped at the moment.
It might be necessary to recognize such state to prevent killing the process and getting a broken coredump. Writing a large core might take significant time, and the process is unresponsive during it, so it might be killed by timeout, if another process is monitoring and killing/restarting hanging tasks.
To provide an ability to detect if a process is in the state of being coreduped, we can expose a boolean CoreDumping flag in /proc/pid/status.
Example: $ cat core.sh #!/bin/sh
echo "|/usr/bin/sleep 10" > /proc/sys/kernel/core_pattern sleep 1000 & PID=$!
cat /proc/$PID/status | grep CoreDumping kill -ABRT $PID sleep 1 cat /proc/$PID/status | grep CoreDumping
$ ./core.sh CoreDumping: 0 CoreDumping: 1
Signed-off-by: Roman Gushchin <guro@fb.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Ingo Molnar <mingo@kernel.org> Cc: kernel-team@fb.com Cc: linux-kernel@vger.kernel.org --- fs/proc/array.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/fs/proc/array.c b/fs/proc/array.c index 88c355574aa0..fc4a0aa7f487 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -369,6 +369,11 @@ static void task_cpus_allowed(struct seq_file *m, struct task_struct *task) cpumask_pr_args(&task->cpus_allowed)); } +static inline void task_core_dumping(struct seq_file *m, struct mm_struct *mm) +{ + seq_printf(m, "CoreDumping:\t%d\n", !!mm->core_state); +} + int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, struct pid *pid, struct task_struct *task) { @@ -379,6 +384,7 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, if (mm) { task_mem(m, mm); + task_core_dumping(m, mm); mmput(mm); } task_sig(m, task); -- 2.13.5
| |