Używam htop na osx i nie mogę się dowiedzieć, jaki status "C" w kolumnie statusu "S" oznacza dla statusu procesu.Co oznacza stan procesu C w htop?
Co oznacza stan procesu C w htop?
Używam htop na osx i nie mogę się dowiedzieć, jaki status "C" w kolumnie statusu "S" oznacza dla statusu procesu.Co oznacza stan procesu C w htop?
Co oznacza stan procesu C w htop?
htop autor tutaj. Nie znam takiego kodu statusu w bazie kodu htop. Należy pamiętać, że htop jest napisany tylko dla systemu Linux, więc nie ma wsparcia dla macOS/OSX. Kiedy słyszę o ludziach używających tego systemu na OSXie, często używają przestarzałego, nieobsługiwanego widelca (najnowsza wersja htop to 2.0.1, w tym obsługa macOS).
Oto różne wartości, że e, STAT i stan Specyfikatory wyjściowe (nagłówek „STAT” lub „S”) ukażą się do opisania stanu procesu:
D bezprzerwowe snu (zwykle IO)
R działa albo uruchamianego (w kolejce roboczym)
S przerywane snu (oczekiwanie na zdarzenie na zakończenia)
T zatrzymany albo przez sygnał sterowania praca lub dlatego, że jest śledzona.
W stronicowania (nie ważne od jądra 2.6.xx)
X martwe (nigdy nie powinny być postrzegane)
Z Nieistniejący ("zombie") proces, zakończone jednak nie odnieść przez jego rodzica.
Źródło: mężczyzna ps
Mam ostatnio to samo pytanie. Możemy starać się szukać go w htop sources:
process->state =
ProcessList_decodeState(p->p_stat == SZOMB ? SZOMB : ki->state);
static int
ProcessList_decodeState(int st) {
switch (st) {
case SIDL:
return 'C';
case SRUN:
return 'R';
case SSLEEP:
return 'S';
case SSTOP:
return 'T';
case SZOMB:
return 'Z';
default:
return '?';
}
}
Więc idziemy do Unix definicji stanów procesu w /usr/include/sys/proc.h:
/* Status values. */
#define SIDL 1 /* Process being created by fork. */
#define SRUN 2 /* Currently runnable. */
#define SSLEEP 3 /* Sleeping on an address. */
#define SSTOP 4 /* Process debugging or suspension. */
#define SZOMB 5 /* Awaiting collection by parent. */
Tak, „C "status ma być" Proces tworzony przez fork ". Co to jest? Zgodnie z old unix sources, jest to stan przejściowy, który występuje, gdy nie ma wystarczającej ilości pamięci podczas rozwidlania procesu i rodzic musi zostać zamieniony.
Co?
Powrót do źródła htop. Skąd mamy ki->state
?
// For all threads in process:
error = thread_info(ki->thread_list[j], THREAD_BASIC_INFO,
(thread_info_t) & ki->thval[j].tb,
&thread_info_count);
tstate = ProcessList_machStateOrder(ki->thval[j].tb.run_state,
ki->thval[j].tb.sleep_time);
if (tstate < ki->state)
ki->state = tstate;
// Below...
static int
ProcessList_machStateOrder(int s, long sleep_time) {
switch (s) {
case TH_STATE_RUNNING:
return 1;
case TH_STATE_UNINTERRUPTIBLE:
return 2;
case TH_STATE_WAITING:
return (sleep_time > 20) ? 4 : 3;
case TH_STATE_STOPPED:
return 5;
case TH_STATE_HALTED:
return 6;
default:
return 7;
}
}
// In mach/thread_info.h:
#define TH_STATE_RUNNING 1 /* thread is running normally */
#define TH_STATE_STOPPED 2 /* thread is stopped */
#define TH_STATE_WAITING 3 /* thread is waiting normally */
#define TH_STATE_UNINTERRUPTIBLE 4 /* thread is in an uninterruptible wait */
#define TH_STATE_HALTED 5 /* thread is halted at a clean point */
Mamy następujące (pomieszane) mapowanie:
Thread state | Mapped to | htop state| 'top' state | 'ps' state
----------------------------------------------------------------------------
TH_STATE_RUNNING | SIDL(1) | 'C' | running | 'R'
TH_STATE_UNINTERRUPTIBLE | SRUN(2) | 'R' | stuck | 'U'
TH_STATE_WAITING (short) | SSLEEP(3) | 'S' | sleeping | 'S'
TH_STATE_WAITING (long) | SSTOP(4) | 'T' | idle | 'I'
TH_STATE_STOPPED | SZOMB(5) | 'Z' | stopped | 'T'
Tak, prawdziwa odpowiedź brzmi: 'C' oznacza, że proces jest uruchomiony.
Jak to się stało? Wydaje się, że obsługa ki->state
została zapożyczona z ps
source i nie została dostosowana do kodów procesowych Unix. Aktualizacja: bug is fixed Yay open source!