Rhel
任務狀態 PA 指的是什麼?
我正在研究 RHEL 7.4 的故障轉儲。它將某些任務狀態顯示為 PA。對於命令 -
crash> ps | grep sample
- 31718 31717 3 ffff8806873a6eb0 **PA** 0.0 42260 8040 sample - 32027 32025 3 ffff880462cf1fa0 **PA** 0.0 42260 8036 sample - 32148 32146 5 ffff88081b75eeb0 **PA** 0.0 42260 8036 sample - 32620 32618 0 ffff8802b1469fa0 **PA** 0.0 42260 8036 sample
沒有任何幫助頁面討論此任務狀態的詳細資訊。
- 誰能告訴我 PA 指的是什麼任務狀態?
- 有關崩潰實用程序中提到的所有程序狀態的任何連結或詳細資訊?
crash> help ps |grep PA - the task state (RU, IN, UN, ZO, ST, TR, DE, SW, WA, PA).**
狀態指停放狀態。此狀態僅對 3.9 到 3.13 之間的核心有效。根據手冊頁:
state %c One of the following characters, indicating process state: R Running S Sleeping in an interruptible wait D Waiting in uninterruptible disk sleep Z Zombie T Stopped (on a signal) or (before Linux 2.6.33) trace stopped t Tracing stop (Linux 2.6.33 onward) W Paging (only before Linux 2.6.0) X Dead (from Linux 2.6.0 onward) x Dead (Linux 2.6.33 to 3.13 only) K Wakekill (Linux 2.6.33 to 3.13 only) W Waking (Linux 2.6.33 to 3.13 only) P Parked (Linux 3.9 to 3.13 only)
這種狀態也稱為不間斷睡眠。有關更多詳細資訊,請參閱此連結。
見http://people.redhat.com/anderson/crash_sources/task.c
char * task_state_string(ulong task, char *buf, int verbose) { long state; int exclusive; int valid, set; if (_RUNNING_ == TASK_STATE_UNINITIALIZED) initialize_task_state(); if (verbose) return task_state_string_verbose(task, buf); if (buf) sprintf(buf, verbose ? "(unknown)" : "??"); state = task_state(task); set = valid = exclusive = 0; if (valid_task_state(_EXCLUSIVE_)) { exclusive = state & _EXCLUSIVE_; state &= ~(_EXCLUSIVE_); } if (state == _RUNNING_) { sprintf(buf, "RU"); valid++; } if (state & _INTERRUPTIBLE_) { sprintf(buf, "IN"); valid++; set++; } if (state & _UNINTERRUPTIBLE_) { if (valid_task_state(_NOLOAD_) && (state & _NOLOAD_)) sprintf(buf, "ID"); else sprintf(buf, "UN"); valid++; set++; } if (state & _ZOMBIE_) { sprintf(buf, "ZO"); valid++; set++; } if (state & _STOPPED_) { sprintf(buf, "ST"); valid++; set++; } if (valid_task_state(_TRACING_STOPPED_) && (state & _TRACING_STOPPED_)) { sprintf(buf, "TR"); valid++; set++; } if (state == _SWAPPING_) { sprintf(buf, "SW"); valid++; set++; } if ((state & _DEAD_) && !set) { sprintf(buf, "DE"); valid++; set++; } if (state == _PARKED_) { sprintf(buf, "PA"); valid++; } if (state == _WAKING_) { sprintf(buf, "WA"); valid++; } if (state == _NEW_) { sprintf(buf, "NE"); valid++; } if (valid && exclusive) strcat(buf, "EX"); return buf;
}