findmnt: add --task <tid> option

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2012-06-28 13:51:34 +02:00
parent aca72ac2f9
commit c7fcc8307d
2 changed files with 28 additions and 1 deletions

View File

@ -85,6 +85,12 @@ option and the option \fB\-\-submounts\fP is not used or if more that one
source file (the option \fB\-F\fP) is specified.
.IP "\fB\-v, \-\-nofsroot\fP"
Do not print a [/dir] in the SOURCE column for bind-mounts or btrfs subvolumes.
.IP "\fB\-N, \-\-task \fItid\fP"
Use alternative namespace /proc/<tid>/mountinfo rather than the default
/proc/self/mountinfo. If the option is specified more than once than tree-like
output is disabled (see the \fB\-\-list\fP option). See also
.BR unshare (1)
command.
.IP "\fB\-n, \-\-noheadings\fP"
Do not print a header line.
.IP "\fB\-u, \-\-notruncate\fP"

View File

@ -629,6 +629,14 @@ static char **append_tabfile(char **files, int *nfiles, char *filename)
return files;
}
static char **append_pid_tabfile(char **files, int *nfiles, pid_t pid)
{
char *path = NULL;
xasprintf(&path, "/proc/%d/mountinfo", (int) pid);
return append_tabfile(files, nfiles, path);
}
/* calls libmount fstab/mtab/mountinfo parser */
static struct libmnt_table *parse_tabfiles(char **files,
int nfiles,
@ -987,6 +995,7 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
fprintf(out, _(
" -i, --invert invert the sense of matching\n"
" -l, --list use list format output\n"
" -N, --task <tid> use alternative namespace (/proc/<tid>/mountinfo file)\n"
" -n, --noheadings don't print column headings\n"
" -u, --notruncate don't truncate text in columns\n"));
fprintf(out, _(
@ -1030,12 +1039,14 @@ int main(int argc, char *argv[])
EXCL_FSTAB,
EXCL_KERNEL,
EXCL_MTAB,
EXCL_TASK,
EXCL_RAW,
EXCL_LIST,
EXCL_PAIRS
};
int excl_fmk = EXCL_NONE;
int excl_fmN = EXCL_NONE;
int excl_rlP = EXCL_NONE;
/* table.h */
@ -1067,6 +1078,7 @@ int main(int argc, char *argv[])
{ "submounts", 0, 0, 'R' },
{ "source", 1, 0, 'S' },
{ "tab-file", 1, 0, 'F' },
{ "task", 1, 0, 'N' },
{ "target", 1, 0, 'T' },
{ "timeout", 1, 0, 'w' },
{ "version", 0, 0, 'V' },
@ -1085,7 +1097,7 @@ int main(int argc, char *argv[])
tt_flags |= TT_FL_TREE;
while ((c = getopt_long(argc, argv,
"AacDd:ehifF:o:O:p::Pklmnrst:uvRS:T:w:V",
"AacDd:ehifF:o:O:p::PklmnN:rst:uvRS:T:w:V",
longopts, NULL)) != -1) {
switch(c) {
case 'A':
@ -1156,11 +1168,13 @@ int main(int argc, char *argv[])
break;
case 'm': /* mtab */
exclusive_option(&excl_fmk, EXCL_MTAB, "--{fstab,mtab,kernel}");
exclusive_option(&excl_fmN, EXCL_MTAB, "--{fstab,mtab,task}");
tabtype = TABTYPE_MTAB;
tt_flags &= ~TT_FL_TREE;
break;
case 's': /* fstab */
exclusive_option(&excl_fmk, EXCL_FSTAB, "--{fstab,mtab,kernel}");
exclusive_option(&excl_fmN, EXCL_FSTAB, "--{fstab,mtab,task}");
tabtype = TABTYPE_FSTAB;
tt_flags &= ~TT_FL_TREE;
break;
@ -1183,6 +1197,13 @@ int main(int argc, char *argv[])
case 'n':
tt_flags |= TT_FL_NOHEADINGS;
break;
case 'N':
exclusive_option(&excl_fmN, EXCL_KERNEL, "--{fstab,mtab,task}");
tabtype = TABTYPE_KERNEL;
tabfiles = append_pid_tabfile(tabfiles, &ntabfiles,
strtou32_or_err(optarg,
_("invalid TID argument")));
break;
case 'v':
flags |= FL_NOFSROOT;
break;