X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsystemctl%2Fsystemctl.c;h=24543ee06db3d6e0dcd1112d14a582e0a28b6917;hb=3b05b8b3b503caf525fa72440a3f9f4bae75268b;hp=3e4cefec7689d5784ec54b91906a640aff0253e3;hpb=7085053a437456ab87d726f3697002dd811fdf7a;p=elogind.git diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 3e4cefec7..24543ee06 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -2658,6 +2658,7 @@ typedef struct UnitStatusInfo { pid_t main_pid; pid_t control_pid; const char *status_text; + const char *pid_file; bool running:1; usec_t start_timestamp; @@ -3057,6 +3058,8 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn i->default_control_group = s; else if (streq(name, "StatusText")) i->status_text = s; + else if (streq(name, "PIDFile")) + i->pid_file = s; else if (streq(name, "SysFSPath")) i->sysfs_path = s; else if (streq(name, "Where")) @@ -3547,9 +3550,19 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo if (!streq_ptr(info.active_state, "active") && !streq_ptr(info.active_state, "reloading") && - streq(verb, "status")) + streq(verb, "status")) { /* According to LSB: "program not running" */ - r = 3; + /* 0: program is running or service is OK + * 1: program is dead and /var/run pid file exists + * 2: program is dead and /var/lock lock file exists + * 3: program is not running + * 4: program or service status is unknown + */ + if (info.pid_file && access(info.pid_file, F_OK) == 0) + r = 1; + else + r = 3; + } while ((p = info.exec)) { LIST_REMOVE(ExecStatusInfo, exec, info.exec, p); @@ -3736,7 +3749,7 @@ static int snapshot(DBusConnection *bus, char **args) { dbus_error_init(&error); if (strv_length(args) > 1) - n = snapshot_name_mangle(args[1]); + n = unit_name_mangle_with_suffix(args[1], ".snapshot"); else n = strdup(""); if (!n) @@ -3811,7 +3824,7 @@ static int delete_snapshot(DBusConnection *bus, char **args) { _cleanup_free_ char *n = NULL; int r; - n = snapshot_name_mangle(*name); + n = unit_name_mangle_with_suffix(*name, ".snapshot"); if (!n) return log_oom(); @@ -4599,7 +4612,7 @@ static int systemctl_help(void) { " the 'list-unit-files' command instead.\n" " --reverse Show reverse dependencies with 'list-dependencies'\n" " --failed Show only failed units\n" - " --full Don't ellipsize unit names on output\n" + " -l --full Don't ellipsize unit names on output\n" " --fail When queueing a new job, fail if conflicting jobs are\n" " pending\n" " --irreversible Create jobs which cannot be implicitly cancelled\n" @@ -4819,7 +4832,6 @@ static int systemctl_parse_argv(int argc, char *argv[]) { ARG_NO_PAGER, ARG_NO_WALL, ARG_ROOT, - ARG_FULL, ARG_NO_RELOAD, ARG_KILL_WHO, ARG_NO_ASK_PASSWORD, @@ -4840,7 +4852,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) { { "before", no_argument, NULL, ARG_BEFORE }, { "show-types", no_argument, NULL, ARG_SHOW_TYPES }, { "failed", no_argument, NULL, ARG_FAILED }, - { "full", no_argument, NULL, ARG_FULL }, + { "full", no_argument, NULL, 'l' }, { "fail", no_argument, NULL, ARG_FAIL }, { "irreversible", no_argument, NULL, ARG_IRREVERSIBLE }, { "ignore-dependencies", no_argument, NULL, ARG_IGNORE_DEPENDENCIES }, @@ -4873,7 +4885,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "ht:p:aqfs:H:Pn:o:i", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "ht:p:alqfs:H:Pn:o:i", options, NULL)) >= 0) { switch (c) { @@ -5021,7 +5033,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) { arg_root = optarg; break; - case ARG_FULL: + case 'l': arg_full = true; break;