lkml.org 
[lkml]   [2005]   [Nov]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC] un petite hack: /proc/*/ctl
    echo kill >/proc/$PID/ctl
    send SIGKILL to process

    echo term >/proc/$PID/ctl
    send SIGTERM to process

    --- a/fs/proc/base.c
    +++ b/fs/proc/base.c
    @@ -71,6 +71,7 @@
    #include <linux/cpuset.h>
    #include <linux/audit.h>
    #include <linux/poll.h>
    +#include <linux/syscalls.h>
    #include "internal.h"

    /*
    @@ -125,6 +126,7 @@ enum pid_directory_inos {
    #endif
    PROC_TGID_OOM_SCORE,
    PROC_TGID_OOM_ADJUST,
    + PROC_TGID_CTL,
    PROC_TID_INO,
    PROC_TID_STATUS,
    PROC_TID_MEM,
    @@ -165,6 +167,7 @@ enum pid_directory_inos {
    #endif
    PROC_TID_OOM_SCORE,
    PROC_TID_OOM_ADJUST,
    + PROC_TID_CTL,

    /* Add new entries before this */
    PROC_TID_FD_DIR = 0x8000, /* 0x8000-0xffff */
    @@ -220,6 +223,7 @@ static struct pid_entry tgid_base_stuff[
    #ifdef CONFIG_AUDITSYSCALL
    E(PROC_TGID_LOGINUID, "loginuid", S_IFREG|S_IWUSR|S_IRUGO),
    #endif
    + E(PROC_TGID_CTL, "ctl", S_IFREG|S_IWUSR),
    {0,0,NULL,0}
    };
    static struct pid_entry tid_base_stuff[] = {
    @@ -262,6 +266,7 @@ static struct pid_entry tid_base_stuff[]
    #ifdef CONFIG_AUDITSYSCALL
    E(PROC_TID_LOGINUID, "loginuid", S_IFREG|S_IWUSR|S_IRUGO),
    #endif
    + E(PROC_TID_CTL, "ctl", S_IFREG|S_IWUSR),
    {0,0,NULL,0}
    };

    @@ -942,6 +947,42 @@ static struct file_operations proc_oom_a
    .write = oom_adjust_write,
    };

    +static ssize_t ctl_write(struct file *file, const char __user *buf,
    + size_t count, loff_t *ppos)
    +{
    + char __buf[5];
    + struct task_struct *task;
    + int sig;
    +
    + count = min(count, sizeof(__buf));
    + memset(__buf, 0, sizeof(__buf));
    + if (copy_from_user(__buf, buf, count))
    + return -EFAULT;
    + __buf[sizeof(__buf) - 1] = '\0';
    +
    +enum {
    + CONFIG_BOFH = 0,
    +};
    +
    + if (strcmp(__buf, "kill") == 0)
    + sig = SIGKILL;
    + else if (CONFIG_BOFH && strcmp(__buf, "FOAD") == 0)
    + sig = SIGKILL;
    + else if (strcmp(__buf, "term") == 0)
    + sig = SIGTERM;
    + else
    + goto exit;
    +
    + task = proc_task(file->f_dentry->d_inode);
    + sys_kill(task->pid, sig);
    +exit:
    + return count;
    +}
    +
    +static struct file_operations proc_ctl_operations = {
    + .write = ctl_write,
    +};
    +
    static struct inode_operations proc_mem_inode_operations = {
    .permission = proc_permission,
    };
    @@ -1780,6 +1821,10 @@ static struct dentry *proc_pident_lookup
    case PROC_TGID_OOM_ADJUST:
    inode->i_fop = &proc_oom_adjust_operations;
    break;
    + case PROC_TID_CTL:
    + case PROC_TGID_CTL:
    + inode->i_fop = &proc_ctl_operations;
    + break;
    #ifdef CONFIG_AUDITSYSCALL
    case PROC_TID_LOGINUID:
    case PROC_TGID_LOGINUID:
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-11-29 01:15    [W:3.141 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site