今日更新-新系列 linux命令行详解之 aux格式输出结果分析:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.4 0.1 24380 14652 ? Ss 14:46 0:01 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 14:46 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 14:46 0:00 [pool_workqueue_release]
root 4 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-rcu_gp]
root 5 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-sync_wq]
root 6 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-kvfree_rcu_reclaim]
root 7 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-slub_flushwq]
root 8 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-netns]
root 10 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/0:1-events]
root 11 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/0:0H-events_highpri]
root 12 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/u512:0-ipv6_addrconf]
root 13 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-mm_percpu_wq]
root 14 0.0 0.0 0 0 ? I 14:46 0:00 [rcu_tasks_kthread]
root 15 0.0 0.0 0 0 ? I 14:46 0:00 [rcu_tasks_rude_kthread]
root 16 0.0 0.0 0 0 ? I 14:46 0:00 [rcu_tasks_trace_kthread]
root 17 0.0 0.0 0 0 ? S 14:46 0:00 [ksoftirqd/0]
root 18 0.0 0.0 0 0 ? I 14:46 0:00 [rcu_preempt]
root 19 0.0 0.0 0 0 ? S 14:46 0:00 [rcu_exp_par_gp_kthread_worker/1]
root 20 0.0 0.0 0 0 ? S 14:46 0:00 [rcu_exp_gp_kthread_worker]
root 21 0.0 0.0 0 0 ? S 14:46 0:00 [migration/0]
root 22 0.0 0.0 0 0 ? S 14:46 0:00 [idle_inject/0]
root 23 0.0 0.0 0 0 ? S 14:46 0:00 [cpuhp/0]
root 24 0.0 0.0 0 0 ? S 14:46 0:00 [cpuhp/1]
root 25 0.0 0.0 0 0 ? S 14:46 0:00 [idle_inject/1]
root 26 0.1 0.0 0 0 ? S 14:46 0:00 [migration/1]
root 27 0.0 0.0 0 0 ? S 14:46 0:00 [ksoftirqd/1]
root 29 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/1:0H-events_highpri]
root 30 0.0 0.0 0 0 ? S 14:46 0:00 [cpuhp/2]
root 31 0.0 0.0 0 0 ? S 14:46 0:00 [idle_inject/2]
root 32 0.1 0.0 0 0 ? S 14:46 0:00 [migration/2]
root 33 0.0 0.0 0 0 ? S 14:46 0:00 [ksoftirqd/2]
root 34 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/2:0-events]
root 35 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/2:0H-kblockd]
root 36 0.0 0.0 0 0 ? S 14:46 0:00 [cpuhp/3]
root 37 0.0 0.0 0 0 ? S 14:46 0:00 [idle_inject/3]
root 38 0.1 0.0 0 0 ? S 14:46 0:00 [migration/3]
root 39 0.0 0.0 0 0 ? S 14:46 0:00 [ksoftirqd/3]
root 41 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/3:0H-events_highpri]
root 42 0.0 0.0 0 0 ? S 14:46 0:00 [cpuhp/4]
root 43 0.0 0.0 0 0 ? S 14:46 0:00 [idle_inject/4]
root 44 0.1 0.0 0 0 ? S 14:46 0:00 [migration/4]
root 45 0.0 0.0 0 0 ? S 14:46 0:00 [ksoftirqd/4]
root 47 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/4:0H-events_highpri]
root 48 0.0 0.0 0 0 ? S 14:46 0:00 [cpuhp/5]
root 49 0.0 0.0 0 0 ? S 14:46 0:00 [idle_inject/5]
root 50 0.1 0.0 0 0 ? S 14:46 0:00 [migration/5]
root 51 0.0 0.0 0 0 ? S 14:46 0:00 [ksoftirqd/5]
root 53 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/5:0H-events_highpri]
root 54 0.0 0.0 0 0 ? S 14:46 0:00 [cpuhp/6]
root 55 0.0 0.0 0 0 ? S 14:46 0:00 [idle_inject/6]
root 56 0.1 0.0 0 0 ? S 14:46 0:00 [migration/6]
root 57 0.0 0.0 0 0 ? S 14:46 0:00 [ksoftirqd/6]
root 58 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/6:0-events]
root 59 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/6:0H-events_highpri]
root 60 0.0 0.0 0 0 ? S 14:46 0:00 [cpuhp/7]
root 61 0.0 0.0 0 0 ? S 14:46 0:00 [idle_inject/7]
root 62 0.1 0.0 0 0 ? S 14:46 0:00 [migration/7]
root 63 0.0 0.0 0 0 ? S 14:46 0:00 [ksoftirqd/7]
root 65 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/7:0H-events_highpri]
root 67 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/u514:0-events_unbound]
root 70 0.0 0.0 0 0 ? S 14:46 0:00 [kdevtmpfs]
root 71 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-inet_frag_wq]
root 72 0.0 0.0 0 0 ? S 14:46 0:00 [kauditd]
root 73 0.0 0.0 0 0 ? S 14:46 0:00 [khungtaskd]
root 75 0.0 0.0 0 0 ? S 14:46 0:00 [oom_reaper]
root 77 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-writeback]
root 78 0.0 0.0 0 0 ? S 14:46 0:00 [kcompactd0]
root 79 0.0 0.0 0 0 ? SN 14:46 0:00 [ksmd]
root 80 0.0 0.0 0 0 ? SN 14:46 0:00 [khugepaged]
root 81 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-kintegrityd]
root 82 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-kblockd]
root 83 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-blkcg_punt_bio]
root 84 0.0 0.0 0 0 ? S 14:46 0:00 [irq/9-acpi]
root 85 0.0 0.0 0 0 ? D 14:46 0:00 [kworker/1:1+usb_hub_wq]
root 86 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-tpm_dev_wq]
root 87 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-ata_sff]
root 88 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-md]
root 89 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-md_bitmap]
root 90 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-edac-poller]
root 91 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-devfreq_wq]
root 92 0.0 0.0 0 0 ? S 14:46 0:00 [watchdogd]
root 93 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/5:1-events]
root 94 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/0:1H-kblockd]
root 95 0.0 0.0 0 0 ? S 14:46 0:00 [kswapd0]
root 96 0.0 0.0 0 0 ? S 14:46 0:00 [ecryptfs-kthread]
root 97 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-kthrotld]
root 98 0.0 0.0 0 0 ? S 14:46 0:00 [irq/24-pciehp]
root 99 0.0 0.0 0 0 ? S 14:46 0:00 [irq/25-pciehp]
root 100 0.0 0.0 0 0 ? S 14:46 0:00 [irq/26-pciehp]
root 101 0.0 0.0 0 0 ? S 14:46 0:00 [irq/27-pciehp]
root 102 0.0 0.0 0 0 ? S 14:46 0:00 [irq/28-pciehp]
root 103 0.0 0.0 0 0 ? S 14:46 0:00 [irq/29-pciehp]
root 104 0.0 0.0 0 0 ? S 14:46 0:00 [irq/30-pciehp]
root 105 0.0 0.0 0 0 ? S 14:46 0:00 [irq/31-pciehp]
root 106 0.0 0.0 0 0 ? S 14:46 0:00 [irq/32-pciehp]
root 107 0.0 0.0 0 0 ? S 14:46 0:00 [irq/33-pciehp]
root 108 0.0 0.0 0 0 ? S 14:46 0:00 [irq/34-pciehp]
root 109 0.0 0.0 0 0 ? S 14:46 0:00 [irq/35-pciehp]
root 110 0.0 0.0 0 0 ? S 14:46 0:00 [irq/36-pciehp]
root 111 0.0 0.0 0 0 ? S 14:46 0:00 [irq/37-pciehp]
root 112 0.0 0.0 0 0 ? S 14:46 0:00 [irq/38-pciehp]
root 113 0.0 0.0 0 0 ? S 14:46 0:00 [irq/39-pciehp]
root 114 0.0 0.0 0 0 ? S 14:46 0:00 [irq/40-pciehp]
root 115 0.0 0.0 0 0 ? S 14:46 0:00 [irq/41-pciehp]
root 116 0.0 0.0 0 0 ? S 14:46 0:00 [irq/42-pciehp]
root 117 0.0 0.0 0 0 ? S 14:46 0:00 [irq/43-pciehp]
root 118 0.0 0.0 0 0 ? S 14:46 0:00 [irq/44-pciehp]
root 119 0.0 0.0 0 0 ? S 14:46 0:00 [irq/45-pciehp]
root 120 0.0 0.0 0 0 ? S 14:46 0:00 [irq/46-pciehp]
root 121 0.0 0.0 0 0 ? S 14:46 0:00 [irq/47-pciehp]
root 122 0.0 0.0 0 0 ? S 14:46 0:00 [irq/48-pciehp]
root 123 0.0 0.0 0 0 ? S 14:46 0:00 [irq/49-pciehp]
root 124 0.0 0.0 0 0 ? S 14:46 0:00 [irq/50-pciehp]
root 125 0.0 0.0 0 0 ? S 14:46 0:00 [irq/51-pciehp]
root 126 0.0 0.0 0 0 ? S 14:46 0:00 [irq/52-pciehp]
root 127 0.0 0.0 0 0 ? S 14:46 0:00 [irq/53-pciehp]
root 128 0.0 0.0 0 0 ? S 14:46 0:00 [irq/54-pciehp]
root 129 0.0 0.0 0 0 ? S 14:46 0:00 [irq/55-pciehp]
root 130 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/4:1-events]
root 131 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-acpi_thermal_pm]
root 133 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_0]
root 134 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_0]
root 135 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_1]
root 136 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_1]
root 140 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-mld]
root 142 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/5:1H-kblockd]
root 143 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-ipv6_addrconf]
root 144 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/u512:1-ipv6_addrconf]
root 151 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-kstrp]
root 152 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/2:1-events]
root 156 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/u517:0-hci0]
root 157 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/u518:0-ttm]
root 158 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/u519:0-ttm]
root 159 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/u520:0-ttm]
root 160 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/u521:0-ttm]
root 161 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/7:1-events]
root 165 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/u516:1-flush-8:0]
root 175 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-charger_manager]
root 176 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/7:2-events]
root 199 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/2:1H-kblockd]
root 203 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/6:1H-kblockd]
root 235 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/7:1H-kblockd]
root 236 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/4:1H-kblockd]
root 240 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/1:1H-kblockd]
root 241 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/3:1H-kblockd]
root 263 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/u514:1-kvfree_rcu_reclaim]
root 265 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-mpt_poll_0]
root 266 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-mpt/0]
root 267 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_2]
root 268 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_2]
root 269 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/u516:2-events_freezable_pwr_efficient]
root 298 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_3]
root 299 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_3]
root 300 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_4]
root 301 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_4]
root 302 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_5]
root 303 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_5]
root 304 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_6]
root 305 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_6]
root 306 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_7]
root 307 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_7]
root 308 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_8]
root 309 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_8]
root 310 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_9]
root 311 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_9]
root 312 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_10]
root 313 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_10]
root 314 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_11]
root 315 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_11]
root 316 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_12]
root 317 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_12]
root 318 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_13]
root 319 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_13]
root 320 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_14]
root 321 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_14]
root 322 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_15]
root 323 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_15]
root 324 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_16]
root 325 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_16]
root 326 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_17]
root 327 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_17]
root 328 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_18]
root 329 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_18]
root 330 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_19]
root 331 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_19]
root 332 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_20]
root 333 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_20]
root 334 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_21]
root 335 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_21]
root 336 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_22]
root 337 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_22]
root 338 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_23]
root 339 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_23]
root 340 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_24]
root 341 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_24]
root 342 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_25]
root 343 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_25]
root 344 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_26]
root 345 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_26]
root 346 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_27]
root 347 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_27]
root 348 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_28]
root 349 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_28]
root 350 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_29]
root 351 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_29]
root 352 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_30]
root 353 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_30]
root 354 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_31]
root 355 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_31]
root 356 0.0 0.0 0 0 ? S 14:46 0:00 [scsi_eh_32]
root 357 0.0 0.0 0 0 ? I< 14:46 0:00 [kworker/R-scsi_tmf_32]
root 376 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/u515:24-events_power_efficient]
root 379 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/u515:27-events_unbound]
root 380 0.0 0.0 0 0 ? I 14:46 0:00 [kworker/u515:28-kvfree_rcu_reclaim]
root 436 0.0 0.0 0 0 ? S 14:47 0:00 [jbd2/sda2-8]
root 437 0.0 0.0 0 0 ? I< 14:47 0:00 [kworker/R-ext4-rsv-conversion]
root 451 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/u514:2-flush-8:0]
root 494 0.0 0.1 67272 17308 ? S<s 14:47 0:00 /usr/lib/systemd/systemd-journald
root 518 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/5:2-mm_percpu_wq]
root 547 0.0 0.0 152476 1368 ? Ssl 14:47 0:00 vmware-vmblock-fuse /run/vmblock-fuse -o rw,subtype=vmw
root 555 0.0 0.0 0 0 ? I< 14:47 0:00 [kworker/R-rpciod]
root 556 0.0 0.0 0 0 ? I< 14:47 0:00 [kworker/R-xprtiod]
root 557 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/3:2-events]
root 558 0.1 0.1 32128 9760 ? Ss 14:47 0:00 /usr/lib/systemd/systemd-udevd
root 561 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/u516:4-events_freezable_pwr_efficient]
root 562 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/3:3-events]
root 570 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/u514:3-flush-8:0]
root 571 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/u513:3-kvfree_rcu_reclaim]
root 576 0.0 0.0 0 0 ? S 14:47 0:00 [irq/16-vmwgfx]
root 577 0.0 0.0 0 0 ? I< 14:47 0:00 [kworker/R-ttm]
root 596 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/u513:4-events_power_efficient]
root 620 0.0 0.0 0 0 ? S 14:47 0:00 [psimon]
root 747 0.0 0.0 0 0 ? S 14:47 0:00 [irq/57-vmw_vmci]
root 748 0.0 0.0 0 0 ? S 14:47 0:00 [irq/58-vmw_vmci]
root 749 0.0 0.0 0 0 ? S 14:47 0:00 [irq/59-vmw_vmci]
root 772 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/1:2-events]
root 809 0.0 0.0 0 0 ? I< 14:47 0:00 [kworker/R-cryptd]
root 1109 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/u516:5-flush-8:0]
root 1121 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/u513:6-events_unbound]
root 1204 0.0 0.0 0 0 ? I< 14:47 0:00 [kworker/u517:2-hci0]
root 1382 0.0 0.0 0 0 ? I 14:47 0:00 [kworker/6:3-events]
_rpc 1399 0.0 0.0 7968 3924 ? Ss 14:47 0:00 /sbin/rpcbind -f -w
systemd+ 1401 0.0 0.0 17560 7508 ? Ss 14:47 0:00 /usr/lib/systemd/systemd-oomd
systemd+ 1402 0.0 0.1 21584 12908 ? Ss 14:47 0:00 /usr/lib/systemd/systemd-resolved
要完全理解 ps -elf
的输出,需从命令本身含义、每个字段的详细解析、内核线程与用户进程的区分,以及关键进程的作用四个维度逐层拆解。以下结合你的输出实例,逐细节说明:
一、先搞懂:ps -elf
命令本身是什么?
ps
是 Linux 中查看进程状态的核心命令,-elf
是三个选项的组合,决定了输出的范围和格式:
选项 | 全称 / 含义 | 作用 |
---|---|---|
-e | --everyone | 显示所有进程(包括系统进程、内核线程、其他用户的进程,无遗漏) |
-l | --long | 以长格式输出,显示进程的优先级、状态、父进程 ID 等核心属性 |
-f | --full | 以全格式输出,补充显示进程的用户 ID、启动时间、完整命令行等 |
三者组合的效果:完整显示系统中所有进程的「身份、状态、资源占用、依赖关系、启动信息」等全部关键细节,是排查进程问题的「全能视角」。
二、逐字段详解:输出列的含义(从左到右)
你的输出第一行是字段标题:F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
,共 16 个字段,每个字段都对应进程的一个核心属性,下面逐个拆解:
1. 字段 1:F
- 进程标志位(Flag)
表示进程的内核状态标志,由多个二进制位组成,每个位代表一个特性,常见取值及含义:
取值 | 含义(二进制位解释) | 输出实例 |
---|---|---|
1 | 位 0 置 1:进程是超级用户进程(UID=0,即 root 权限) | 内核线程 [kthreadd] (PID=2)的 F=1 |
4 | 位 2 置 1:进程有子进程,且子进程被跟踪(或进程本身是「进程组 leader」) | 系统初始化进程 init (PID=1)的 F=4 |
5 | 位 0 + 位 2 置 1:超级用户进程 + 有子进程 | 内核线程 [kdevtmpfs] (PID=70)的 F=5 |
0 | 无特殊标志:普通用户进程,无子进程跟踪 | 终端进程 bash (PID=3872)的 F=0 |
核心:
F
字段反映进程的「权限等级」和「子进程管理状态」,root 进程的 F 通常含 1,有子进程的含 4。
2. 字段 2:S
- 进程状态(State)
最关键的字段之一,反映进程当前的「运行状态」,不同字母对应不同状态,你的输出中出现了 S
、I
、R
,完整状态对照表:
状态符 | 全称 | 含义 | 输出实例 | |
---|---|---|---|---|
R | Running/Runnable | 正在运行(占用 CPU)或等待 CPU(就绪态) | ps -elf 命令本身(PID=4189)的 S=R(正在执行) | |
S | Interruptible Sleep | 可中断睡眠(等待某个事件完成,如 IO、信号,可被信号唤醒) | 系统初始化进程 init (PID=1)的 S=S(等待系统事件) | |
I | Idle Kernel Thread | 空闲内核线程(仅内核线程有此状态,等待内核任务,不占用 CPU) | 内核工作队列线程 [kworker/R-rcu_gp] (PID=4)的 S=I | |
D | Uninterruptible Sleep | 不可中断睡眠(等待关键 IO,如磁盘读写,不能被信号唤醒,强行杀进程会导致数据丢失) | (你的输出中未出现,常见于磁盘 IO 密集进程) | |
Z | Zombie | 僵尸进程(进程已退出,但父进程未回收其资源,PID 还在) | (你的输出中未出现,需用 `ps aux | grep Z` 排查) |
T | Stopped | 进程被暂停(如用 Ctrl+Z 暂停,或被 kill -STOP 停止) | (你的输出中未出现,常见于调试中的进程) |
核心:
S=I
是内核线程的专属空闲状态,S=S
是用户进程的普通睡眠,S=R
是活跃进程。
3. 字段 3:UID
- 进程所属用户 ID(User ID)
表示进程由哪个用户启动,决定了进程的「权限范围」,常见取值:
UID 值 | 对应用户 | 含义 | 输出实例 |
---|---|---|---|
root | 超级用户(UID=0) | 拥有系统最高权限,系统进程、内核线程几乎都是 root | init (PID=1)、kthreadd (PID=2)的 UID=root |
avahi | Avahi 用户 | 用于 Avahi 服务(局域网设备发现,如打印机共享) | avahi-daemon (PID=1612)的 UID=avahi |
syslog | Syslog 用户 | 用于日志服务(rsyslogd,管理系统日志) | rsyslogd (PID=1616)的 UID=syslog |
linux | 普通用户(如你的登录用户) | 仅拥有普通权限,桌面进程、终端进程都是此用户 | gnome-shell (PID=2971)、bash (PID=3872)的 UID=linux |
核心:通过 UID 可快速判断进程的「权限风险」—— 若普通用户启动了 UID=root 的进程,可能存在权限异常。
4. 字段 4:PID
- 进程 ID(Process ID)
进程的唯一标识(系统中每个进程的 PID 不重复),是操作进程的核心依据(如 kill PID
终止进程),关键 PID 的特殊意义:
PID 值 | 对应进程 | 特殊意义 |
---|---|---|
1 | init (或 systemd ) | 「进程之祖」:系统启动后第一个用户进程,所有用户进程的最终父进程 |
2 | kthreadd | 「内核线程之父」:所有内核线程的父进程,由内核直接创建 |
其他 | 普通进程 / 内核线程 | 如 NetworkManager (PID=1658)、gnome-shell (PID=2971) |
核心:PID 是进程的「身份证」,排查进程问题时必须先定位 PID。
5. 字段 5:PPID
- 父进程 ID(Parent PID)
表示当前进程的「父进程」(哪个进程启动了它),反映进程的「依赖关系」,实例分析:
子进程 PID | 子进程名称 | PPID | 父进程名称 | 关系说明 |
---|---|---|---|---|
1 | init | 0 | 内核(PID=0) | init 由内核直接启动,无用户态父进程 |
2 | kthreadd | 0 | 内核(PID=0) | 内核线程的根进程,由内核创建 |
1658 | NetworkManager | 1 | init | 网络管理进程由系统初始化进程启动 |
3872 | bash | 3865 | gnome-terminal-server | 终端 bash 进程由终端服务进程启动 |
核心:通过 PPID 可追溯进程的「启动链」,比如终止父进程会导致子进程成为「孤儿进程」(最终被 init 收养,PPID 变为 1)。
6. 字段 6:C
- CPU 使用率(CPU Utilization)
表示进程在过去一段时间内(通常是 100ms)占用 CPU 的百分比(0~100),反映进程的「CPU 繁忙程度」:
C 值 | 含义 | 输出实例 |
---|---|---|
0 | 几乎不占用 CPU(空闲或等待 IO) | 大多数内核线程(如 [kworker] )、后台进程(如 init )的 C=0 |
2 | 占用 2% CPU(轻度繁忙) | 桌面进程 gnome-shell (PID=2971)的 C=2(负责桌面渲染,轻度占用) |
更高值(如 10、50) | 高 CPU 占用(可能是性能瓶颈) | (你的输出中未出现,常见于计算密集型进程,如编译、数据分析) |
注意:
C
是「历史平均使用率」,不是实时值,实时查看需用top
命令。
7. 字段 7:PRI
- 进程优先级(Priority)
表示进程被 CPU 调度的「优先级」,值越小,优先级越高(CPU 越优先分配时间片),取值范围通常是 0~139
:
- 核心逻辑:
PRI = 80 + NI
(80 是默认基础优先级,NI 是下面的 nice 值) - 实例:
khugepaged
(PID=80)的 PRI=99,对应 NI=19(80+19=99),优先级低;kworker
(PID=4)的 PRI=60,对应 NI=-20(80-20=60),优先级高。
核心:
PRI
是内核实际调度时使用的优先级,由NI
(nice 值)调整。
8. 字段 8:NI
- 进程 nice 值(Nice Value)
用于「调整进程优先级」的用户态参数,取值范围是 -20~19
,规则:
NI 值 | 含义 | 对 PRI 的影响 | 输出实例 |
---|---|---|---|
-20 | 最高 nice 值(优先级最高) | PRI=80-20=60 | 内核关键线程 [kworker/R-rcu_gp] (PID=4)的 NI=-20 |
0 | 默认 nice 值(普通优先级) | PRI=80+0=80 | 大多数进程(如 init 、bash )的 NI=0 |
19 | 最低 nice 值(优先级最低) | PRI=80+19=99 | 内存优化进程 khugepaged (PID=80)的 NI=19 |
注意:普通用户只能将 NI 调大(降低优先级),root 用户可任意调整(如
nice -n -5 进程名
提高优先级)。
9. 字段 9:ADDR
- 进程内存地址(Address)
表示进程在内存中的「位置」,但现代 Linux 使用「虚拟内存分页机制」,此字段已几乎无实际意义,常见取值:
ADDR 值 | 含义 | 输出实例 |
---|---|---|
- | 进程不在物理内存中(或内核线程无用户态内存) | 所有内核线程(如 [kthreadd] )、大多数用户进程(如 init )的 ADDR=- |
具体地址(如 0x1234 ) | 进程在物理内存中的地址 | (极少出现,仅用于调试内核) |
核心:无需关注此字段,现代系统中它的实用价值已被虚拟内存机制取代。
10. 字段 10:SZ
- 进程虚拟内存大小(Size)
表示进程占用的「虚拟内存总量」,单位是「内存页」(1 页 = 4KB,不同系统可能不同),计算公式:虚拟内存大小(KB)= SZ × 4
:
SZ 值 | 含义 | 输出实例 |
---|---|---|
0 | 无虚拟内存(仅内核线程,无用户态地址空间) | 所有内核线程(如 [kthreadd] )的 SZ=0 |
6095 | 虚拟内存 = 6095×4=24380KB≈24MB | init (PID=1)的 SZ=6095(系统初始化进程,内存占用小) |
1124258 | 虚拟内存 = 1124258×4≈4.4GB | gnome-shell (PID=2971)的 SZ=1124258(桌面渲染进程,虚拟内存大,含共享库) |
注意:
SZ
是虚拟内存(含共享库、交换空间),不是物理内存(物理内存需看top
中的RES
字段)。
11. 字段 11:WCHAN
- 进程等待的内核事件(Wait Channel)
表示进程当前「等待的内核函数或事件」(若进程处于睡眠状态,此字段显示它在等什么),常见取值:
WCHAN 值 | 含义 | 输出实例 |
---|---|---|
- | 进程正在运行(R 状态),无需等待 | ps -elf 命令本身(PID=4189,S=R)的 WCHAN=- |
ep_pol | 等待 epoll 事件(IO 多路复用,如网络服务、桌面进程) | pipewire (PID=2683)的 WCHAN=ep_pol(音频服务等待 IO) |
do_pol | 等待 poll 事件(传统 IO 多路复用) | gnome-shell (PID=2971)的 WCHAN=do_pol(桌面进程等待用户输入) |
futex_ | 等待 futex 同步(进程间互斥锁,如多线程程序) | gvfsd-fuse (PID=2889)的 WCHAN=futex_(文件系统服务等待锁) |
核心:通过 WCHAN 可判断睡眠进程的「等待原因」,比如 WCHAN=ep_pol 通常是网络 / IO 进程,WCHAN=futex_是多线程同步。
12. 字段 12:STIME
- 进程启动时间(Start Time)
表示进程的「启动时间」,格式为「时:分」(若启动时间超过 24 小时,会显示为「月 - 日」):
STIME 值 | 含义 | 输出实例 |
---|---|---|
14:46 | 进程在 14 点 46 分启动 | 系统初始化进程 init 、内核线程 kthreadd 的 STIME=14:46(系统启动时间) |
14:47 | 进程在 14 点 47 分启动 | 桌面进程 gnome-shell 、终端进程 bash 的 STIME=14:47(用户登录后启动) |
核心:通过 STIME 可判断进程的「存活时间」,比如 STIME=14:46 的进程是系统启动时就运行的核心进程。
13. 字段 13:TTY
- 进程关联的终端(Terminal)
表示进程是从哪个「终端」启动的(终端是进程与用户交互的接口),常见取值:
TTY 值 | 含义 | 输出实例 |
---|---|---|
? | 无关联终端(后台进程、系统进程、内核线程,无需用户交互) | 所有内核线程(如 [kthreadd] )、系统服务(如 init 、NetworkManager )的 TTY=? |
tty2 | 虚拟控制台终端(本地物理终端,按 Ctrl+Alt+F2 可切换) | gdm-wayland-session (PID=2783)的 TTY=tty2(桌面登录终端) |
pts/0 | 伪终端(远程登录或终端模拟器,如 SSH、GNOME 终端) | bash (PID=3872)、ps -elf (PID=4189)的 TTY=pts/0(你当前使用的终端) |
核心:TTY=? 的进程是「无人值守」的后台进程,TTY=pts/xx 的是用户当前交互的进程。
14. 字段 14:TIME
- 进程占用 CPU 的总时间(CPU Time)
表示进程从启动到现在「累计占用 CPU 的时间」,格式为「时:分: 秒」,注意:不是进程的存活时间,而是实际使用 CPU 的时间:
TIME 值 | 含义 | 输出实例 |
---|---|---|
00:00:00 | 几乎未占用 CPU | 大多数内核线程、后台服务(如 avahi-daemon )的 TIME=00:00:00 |
00:00:01 | 累计占用 CPU 1 秒 | init (PID=1)的 TIME=00:00:01(系统启动后仅用 1 秒 CPU) |
00:00:10 | 累计占用 CPU 10 秒 | gnome-shell (PID=2971)的 TIME=00:00:10(桌面渲染消耗 CPU) |
核心:TIME 值高的进程可能是「CPU 密集型进程」(如编译、数据分析),需关注是否存在性能瓶颈。
15. 字段 15:CMD
- 进程的完整命令行(Command)
表示启动进程的「完整命令及参数」,是识别进程用途的最直接依据,关键分类:
CMD 格式 | 含义 | 输出实例 |
---|---|---|
[命令名] | 内核线程(用中括号区分,无用户态命令行) | [kthreadd] 、[kworker/R-rcu_gp] (内核线程,负责内核任务) |
/路径/命令 参数 | 用户进程 / 系统服务(完整路径 + 参数) | /sbin/init splash (init 进程,参数splash 表示启动图形界面)、/usr/lib/snapd/snapd (Snap 包管理服务) |
命令 参数 | 普通用户进程(无完整路径,依赖环境变量) | bash (终端 shell)、ps -elf (当前执行的命令) |
核心:CMD 是判断进程「用途」的核心 —— 比如看到
NetworkManager
就知道是网络管理进程,看到gnome-shell
就知道是桌面核心进程。
三、关键区分:内核线程 vs 用户进程
你的输出中,大量 [xxx]
格式的进程是内核线程,其余是用户进程,两者的核心区别如下:
特征 | 内核线程(Kernel Thread) | 用户进程(User Process) |
---|---|---|
CMD 格式 | 用中括号包裹(如 [kthreadd] ) | 无中括号(如 /sbin/init ) |
SZ 值 | 0(无用户态虚拟内存) | 大于 0(有虚拟内存) |
UID | 几乎都是 root | 可能是 root、普通用户(如 linux)、专用用户(如 avahi) |
PPID | 几乎都是 2(父进程是 kthreadd ) | 父进程多样(如 init、终端进程、服务进程) |
作用 | 执行内核任务(如内存回收、IO 调度、中断处理) | 执行用户任务(如桌面渲染、网络管理、终端交互) |
实例:
[kworker/R-rcu_gp]
(内核线程,回收内存)、NetworkManager
(用户进程,管理网络)。
四、核心进程解析(结合你的输出)
从输出中挑出几个「系统运行必需」的关键进程,理解它们的作用:
-
/sbin/init splash
(PID=1,PPID=0)系统「初始化进程」(Ubuntu 中是systemd
的软链接),负责启动所有系统服务(如 NetworkManager、snapd)和用户进程,是所有用户进程的「最终父进程」,一旦退出,系统会崩溃。 -
[kthreadd]
(PID=2,PPID=0)内核线程的「父进程」,由内核直接创建,负责管理所有内核线程(如 kworker、ksoftirqd),是内核任务的「调度中枢」。 -
/usr/lib/snapd/snapd
(PID=1601,PPID=1)Snap 包管理服务,负责安装、更新、运行 Snap 格式的软件(如 Chrome、VS Code 的 Snap 版本),是 Ubuntu 中常见的包管理进程。 -
/usr/sbin/NetworkManager
(PID=1658,PPID=1)网络管理进程,负责管理 WiFi、以太网、VPN 等网络连接,自动获取 IP 地址(DHCP),是桌面系统联网的核心。 -
/usr/sbin/gdm3
(PID=1906,PPID=1)GNOME 桌面的「登录管理器」,负责显示登录界面、验证用户密码、启动桌面会话(如 gnome-shell),没有它无法进入图形桌面。 -
/usr/bin/gnome-shell
(PID=2971,PPID=2669)GNOME 桌面的「核心渲染进程」,负责绘制桌面、任务栏、窗口管理、用户交互(如点击图标、拖动窗口),是桌面可视化的关键。 -
bash
(PID=3872,PPID=3865)终端的「命令行解释器」(shell),你输入的所有 Linux 命令(如ps -elf
)都由它执行,是用户与系统交互的「桥梁」。
总结
ps -elf
的输出是一张「系统进程全景图」,每个字段都对应进程的一个核心属性:
- 从
PID
、PPID
看进程依赖; - 从
S
、WCHAN
看进程状态; - 从
UID
、F
看进程权限; - 从
CMD
看进程用途。
日常排查问题时,可结合 grep
过滤(如 ps -elf | grep gnome-shell
查看桌面进程),快速定位目标进程的详细信息。
(2)扩展 : -elf 又是输出了啥???
要完全理解 ps -elf
的输出,需从命令本身含义、每个字段的详细解析、内核线程与用户进程的区分,以及关键进程的作用四个维度逐层拆解。以下结合你的输出实例,逐细节说明:
一、先搞懂:ps -elf
命令本身是什么?
ps
是 Linux 中查看进程状态的核心命令,-elf
是三个选项的组合,决定了输出的范围和格式:
选项 | 全称 / 含义 | 作用 |
---|---|---|
-e | --everyone | 显示所有进程(包括系统进程、内核线程、其他用户的进程,无遗漏) |
-l | --long | 以长格式输出,显示进程的优先级、状态、父进程 ID 等核心属性 |
-f | --full | 以全格式输出,补充显示进程的用户 ID、启动时间、完整命令行等 |
三者组合的效果:完整显示系统中所有进程的「身份、状态、资源占用、依赖关系、启动信息」等全部关键细节,是排查进程问题的「全能视角」。
二、逐字段详解:输出列的含义(从左到右)
你的输出第一行是字段标题:F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
,共 16 个字段,每个字段都对应进程的一个核心属性,下面逐个拆解:
1. 字段 1:F
- 进程标志位(Flag)
表示进程的内核状态标志,由多个二进制位组成,每个位代表一个特性,常见取值及含义:
取值 | 含义(二进制位解释) | 输出实例 |
---|---|---|
1 | 位 0 置 1:进程是超级用户进程(UID=0,即 root 权限) | 内核线程 [kthreadd] (PID=2)的 F=1 |
4 | 位 2 置 1:进程有子进程,且子进程被跟踪(或进程本身是「进程组 leader」) | 系统初始化进程 init (PID=1)的 F=4 |
5 | 位 0 + 位 2 置 1:超级用户进程 + 有子进程 | 内核线程 [kdevtmpfs] (PID=70)的 F=5 |
0 | 无特殊标志:普通用户进程,无子进程跟踪 | 终端进程 bash (PID=3872)的 F=0 |
核心:
F
字段反映进程的「权限等级」和「子进程管理状态」,root 进程的 F 通常含 1,有子进程的含 4。
2. 字段 2:S
- 进程状态(State)
最关键的字段之一,反映进程当前的「运行状态」,不同字母对应不同状态,你的输出中出现了 S
、I
、R
,完整状态对照表:
状态符 | 全称 | 含义 | 输出实例 | |
---|---|---|---|---|
R | Running/Runnable | 正在运行(占用 CPU)或等待 CPU(就绪态) | ps -elf 命令本身(PID=4189)的 S=R(正在执行) | |
S | Interruptible Sleep | 可中断睡眠(等待某个事件完成,如 IO、信号,可被信号唤醒) | 系统初始化进程 init (PID=1)的 S=S(等待系统事件) | |
I | Idle Kernel Thread | 空闲内核线程(仅内核线程有此状态,等待内核任务,不占用 CPU) | 内核工作队列线程 [kworker/R-rcu_gp] (PID=4)的 S=I | |
D | Uninterruptible Sleep | 不可中断睡眠(等待关键 IO,如磁盘读写,不能被信号唤醒,强行杀进程会导致数据丢失) | (你的输出中未出现,常见于磁盘 IO 密集进程) | |
Z | Zombie | 僵尸进程(进程已退出,但父进程未回收其资源,PID 还在) | (你的输出中未出现,需用 `ps aux | grep Z` 排查) |
T | Stopped | 进程被暂停(如用 Ctrl+Z 暂停,或被 kill -STOP 停止) | (你的输出中未出现,常见于调试中的进程) |
核心:
S=I
是内核线程的专属空闲状态,S=S
是用户进程的普通睡眠,S=R
是活跃进程。
3. 字段 3:UID
- 进程所属用户 ID(User ID)
表示进程由哪个用户启动,决定了进程的「权限范围」,常见取值:
UID 值 | 对应用户 | 含义 | 输出实例 |
---|---|---|---|
root | 超级用户(UID=0) | 拥有系统最高权限,系统进程、内核线程几乎都是 root | init (PID=1)、kthreadd (PID=2)的 UID=root |
avahi | Avahi 用户 | 用于 Avahi 服务(局域网设备发现,如打印机共享) | avahi-daemon (PID=1612)的 UID=avahi |
syslog | Syslog 用户 | 用于日志服务(rsyslogd,管理系统日志) | rsyslogd (PID=1616)的 UID=syslog |
linux | 普通用户(如你的登录用户) | 仅拥有普通权限,桌面进程、终端进程都是此用户 | gnome-shell (PID=2971)、bash (PID=3872)的 UID=linux |
核心:通过 UID 可快速判断进程的「权限风险」—— 若普通用户启动了 UID=root 的进程,可能存在权限异常。
4. 字段 4:PID
- 进程 ID(Process ID)
进程的唯一标识(系统中每个进程的 PID 不重复),是操作进程的核心依据(如 kill PID
终止进程),关键 PID 的特殊意义:
PID 值 | 对应进程 | 特殊意义 |
---|---|---|
1 | init (或 systemd ) | 「进程之祖」:系统启动后第一个用户进程,所有用户进程的最终父进程 |
2 | kthreadd | 「内核线程之父」:所有内核线程的父进程,由内核直接创建 |
其他 | 普通进程 / 内核线程 | 如 NetworkManager (PID=1658)、gnome-shell (PID=2971) |
核心:PID 是进程的「身份证」,排查进程问题时必须先定位 PID。
5. 字段 5:PPID
- 父进程 ID(Parent PID)
表示当前进程的「父进程」(哪个进程启动了它),反映进程的「依赖关系」,实例分析:
子进程 PID | 子进程名称 | PPID | 父进程名称 | 关系说明 |
---|---|---|---|---|
1 | init | 0 | 内核(PID=0) | init 由内核直接启动,无用户态父进程 |
2 | kthreadd | 0 | 内核(PID=0) | 内核线程的根进程,由内核创建 |
1658 | NetworkManager | 1 | init | 网络管理进程由系统初始化进程启动 |
3872 | bash | 3865 | gnome-terminal-server | 终端 bash 进程由终端服务进程启动 |
核心:通过 PPID 可追溯进程的「启动链」,比如终止父进程会导致子进程成为「孤儿进程」(最终被 init 收养,PPID 变为 1)。
6. 字段 6:C
- CPU 使用率(CPU Utilization)
表示进程在过去一段时间内(通常是 100ms)占用 CPU 的百分比(0~100),反映进程的「CPU 繁忙程度」:
C 值 | 含义 | 输出实例 |
---|---|---|
0 | 几乎不占用 CPU(空闲或等待 IO) | 大多数内核线程(如 [kworker] )、后台进程(如 init )的 C=0 |
2 | 占用 2% CPU(轻度繁忙) | 桌面进程 gnome-shell (PID=2971)的 C=2(负责桌面渲染,轻度占用) |
更高值(如 10、50) | 高 CPU 占用(可能是性能瓶颈) | (你的输出中未出现,常见于计算密集型进程,如编译、数据分析) |
注意:
C
是「历史平均使用率」,不是实时值,实时查看需用top
命令。
7. 字段 7:PRI
- 进程优先级(Priority)
表示进程被 CPU 调度的「优先级」,值越小,优先级越高(CPU 越优先分配时间片),取值范围通常是 0~139
:
- 核心逻辑:
PRI = 80 + NI
(80 是默认基础优先级,NI 是下面的 nice 值) - 实例:
khugepaged
(PID=80)的 PRI=99,对应 NI=19(80+19=99),优先级低;kworker
(PID=4)的 PRI=60,对应 NI=-20(80-20=60),优先级高。
核心:
PRI
是内核实际调度时使用的优先级,由NI
(nice 值)调整。
8. 字段 8:NI
- 进程 nice 值(Nice Value)
用于「调整进程优先级」的用户态参数,取值范围是 -20~19
,规则:
NI 值 | 含义 | 对 PRI 的影响 | 输出实例 |
---|---|---|---|
-20 | 最高 nice 值(优先级最高) | PRI=80-20=60 | 内核关键线程 [kworker/R-rcu_gp] (PID=4)的 NI=-20 |
0 | 默认 nice 值(普通优先级) | PRI=80+0=80 | 大多数进程(如 init 、bash )的 NI=0 |
19 | 最低 nice 值(优先级最低) | PRI=80+19=99 | 内存优化进程 khugepaged (PID=80)的 NI=19 |
注意:普通用户只能将 NI 调大(降低优先级),root 用户可任意调整(如
nice -n -5 进程名
提高优先级)。
9. 字段 9:ADDR
- 进程内存地址(Address)
表示进程在内存中的「位置」,但现代 Linux 使用「虚拟内存分页机制」,此字段已几乎无实际意义,常见取值:
ADDR 值 | 含义 | 输出实例 |
---|---|---|
- | 进程不在物理内存中(或内核线程无用户态内存) | 所有内核线程(如 [kthreadd] )、大多数用户进程(如 init )的 ADDR=- |
具体地址(如 0x1234 ) | 进程在物理内存中的地址 | (极少出现,仅用于调试内核) |
核心:无需关注此字段,现代系统中它的实用价值已被虚拟内存机制取代。
10. 字段 10:SZ
- 进程虚拟内存大小(Size)
表示进程占用的「虚拟内存总量」,单位是「内存页」(1 页 = 4KB,不同系统可能不同),计算公式:虚拟内存大小(KB)= SZ × 4
:
SZ 值 | 含义 | 输出实例 |
---|---|---|
0 | 无虚拟内存(仅内核线程,无用户态地址空间) | 所有内核线程(如 [kthreadd] )的 SZ=0 |
6095 | 虚拟内存 = 6095×4=24380KB≈24MB | init (PID=1)的 SZ=6095(系统初始化进程,内存占用小) |
1124258 | 虚拟内存 = 1124258×4≈4.4GB | gnome-shell (PID=2971)的 SZ=1124258(桌面渲染进程,虚拟内存大,含共享库) |
注意:
SZ
是虚拟内存(含共享库、交换空间),不是物理内存(物理内存需看top
中的RES
字段)。
11. 字段 11:WCHAN
- 进程等待的内核事件(Wait Channel)
表示进程当前「等待的内核函数或事件」(若进程处于睡眠状态,此字段显示它在等什么),常见取值:
WCHAN 值 | 含义 | 输出实例 |
---|---|---|
- | 进程正在运行(R 状态),无需等待 | ps -elf 命令本身(PID=4189,S=R)的 WCHAN=- |
ep_pol | 等待 epoll 事件(IO 多路复用,如网络服务、桌面进程) | pipewire (PID=2683)的 WCHAN=ep_pol(音频服务等待 IO) |
do_pol | 等待 poll 事件(传统 IO 多路复用) | gnome-shell (PID=2971)的 WCHAN=do_pol(桌面进程等待用户输入) |
futex_ | 等待 futex 同步(进程间互斥锁,如多线程程序) | gvfsd-fuse (PID=2889)的 WCHAN=futex_(文件系统服务等待锁) |
核心:通过 WCHAN 可判断睡眠进程的「等待原因」,比如 WCHAN=ep_pol 通常是网络 / IO 进程,WCHAN=futex_是多线程同步。
12. 字段 12:STIME
- 进程启动时间(Start Time)
表示进程的「启动时间」,格式为「时:分」(若启动时间超过 24 小时,会显示为「月 - 日」):
STIME 值 | 含义 | 输出实例 |
---|---|---|
14:46 | 进程在 14 点 46 分启动 | 系统初始化进程 init 、内核线程 kthreadd 的 STIME=14:46(系统启动时间) |
14:47 | 进程在 14 点 47 分启动 | 桌面进程 gnome-shell 、终端进程 bash 的 STIME=14:47(用户登录后启动) |
核心:通过 STIME 可判断进程的「存活时间」,比如 STIME=14:46 的进程是系统启动时就运行的核心进程。
13. 字段 13:TTY
- 进程关联的终端(Terminal)
表示进程是从哪个「终端」启动的(终端是进程与用户交互的接口),常见取值:
TTY 值 | 含义 | 输出实例 |
---|---|---|
? | 无关联终端(后台进程、系统进程、内核线程,无需用户交互) | 所有内核线程(如 [kthreadd] )、系统服务(如 init 、NetworkManager )的 TTY=? |
tty2 | 虚拟控制台终端(本地物理终端,按 Ctrl+Alt+F2 可切换) | gdm-wayland-session (PID=2783)的 TTY=tty2(桌面登录终端) |
pts/0 | 伪终端(远程登录或终端模拟器,如 SSH、GNOME 终端) | bash (PID=3872)、ps -elf (PID=4189)的 TTY=pts/0(你当前使用的终端) |
核心:TTY=? 的进程是「无人值守」的后台进程,TTY=pts/xx 的是用户当前交互的进程。
14. 字段 14:TIME
- 进程占用 CPU 的总时间(CPU Time)
表示进程从启动到现在「累计占用 CPU 的时间」,格式为「时:分: 秒」,注意:不是进程的存活时间,而是实际使用 CPU 的时间:
TIME 值 | 含义 | 输出实例 |
---|---|---|
00:00:00 | 几乎未占用 CPU | 大多数内核线程、后台服务(如 avahi-daemon )的 TIME=00:00:00 |
00:00:01 | 累计占用 CPU 1 秒 | init (PID=1)的 TIME=00:00:01(系统启动后仅用 1 秒 CPU) |
00:00:10 | 累计占用 CPU 10 秒 | gnome-shell (PID=2971)的 TIME=00:00:10(桌面渲染消耗 CPU) |
核心:TIME 值高的进程可能是「CPU 密集型进程」(如编译、数据分析),需关注是否存在性能瓶颈。
15. 字段 15:CMD
- 进程的完整命令行(Command)
表示启动进程的「完整命令及参数」,是识别进程用途的最直接依据,关键分类:
CMD 格式 | 含义 | 输出实例 |
---|---|---|
[命令名] | 内核线程(用中括号区分,无用户态命令行) | [kthreadd] 、[kworker/R-rcu_gp] (内核线程,负责内核任务) |
/路径/命令 参数 | 用户进程 / 系统服务(完整路径 + 参数) | /sbin/init splash (init 进程,参数splash 表示启动图形界面)、/usr/lib/snapd/snapd (Snap 包管理服务) |
命令 参数 | 普通用户进程(无完整路径,依赖环境变量) | bash (终端 shell)、ps -elf (当前执行的命令) |
核心:CMD 是判断进程「用途」的核心 —— 比如看到
NetworkManager
就知道是网络管理进程,看到gnome-shell
就知道是桌面核心进程。
三、关键区分:内核线程 vs 用户进程
你的输出中,大量 [xxx]
格式的进程是内核线程,其余是用户进程,两者的核心区别如下:
特征 | 内核线程(Kernel Thread) | 用户进程(User Process) |
---|---|---|
CMD 格式 | 用中括号包裹(如 [kthreadd] ) | 无中括号(如 /sbin/init ) |
SZ 值 | 0(无用户态虚拟内存) | 大于 0(有虚拟内存) |
UID | 几乎都是 root | 可能是 root、普通用户(如 linux)、专用用户(如 avahi) |
PPID | 几乎都是 2(父进程是 kthreadd ) | 父进程多样(如 init、终端进程、服务进程) |
作用 | 执行内核任务(如内存回收、IO 调度、中断处理) | 执行用户任务(如桌面渲染、网络管理、终端交互) |
实例:
[kworker/R-rcu_gp]
(内核线程,回收内存)、NetworkManager
(用户进程,管理网络)。
四、核心进程解析(结合你的输出)
从输出中挑出几个「系统运行必需」的关键进程,理解它们的作用:
-
/sbin/init splash
(PID=1,PPID=0)系统「初始化进程」(Ubuntu 中是systemd
的软链接),负责启动所有系统服务(如 NetworkManager、snapd)和用户进程,是所有用户进程的「最终父进程」,一旦退出,系统会崩溃。 -
[kthreadd]
(PID=2,PPID=0)内核线程的「父进程」,由内核直接创建,负责管理所有内核线程(如 kworker、ksoftirqd),是内核任务的「调度中枢」。 -
/usr/lib/snapd/snapd
(PID=1601,PPID=1)Snap 包管理服务,负责安装、更新、运行 Snap 格式的软件(如 Chrome、VS Code 的 Snap 版本),是 Ubuntu 中常见的包管理进程。 -
/usr/sbin/NetworkManager
(PID=1658,PPID=1)网络管理进程,负责管理 WiFi、以太网、VPN 等网络连接,自动获取 IP 地址(DHCP),是桌面系统联网的核心。 -
/usr/sbin/gdm3
(PID=1906,PPID=1)GNOME 桌面的「登录管理器」,负责显示登录界面、验证用户密码、启动桌面会话(如 gnome-shell),没有它无法进入图形桌面。 -
/usr/bin/gnome-shell
(PID=2971,PPID=2669)GNOME 桌面的「核心渲染进程」,负责绘制桌面、任务栏、窗口管理、用户交互(如点击图标、拖动窗口),是桌面可视化的关键。 -
bash
(PID=3872,PPID=3865)终端的「命令行解释器」(shell),你输入的所有 Linux 命令(如ps -elf
)都由它执行,是用户与系统交互的「桥梁」。
总结
ps -elf
的输出是一张「系统进程全景图」,每个字段都对应进程的一个核心属性:
- 从
PID
、PPID
看进程依赖; - 从
S
、WCHAN
看进程状态; - 从
UID
、F
看进程权限; - 从
CMD
看进程用途。
日常排查问题时,可结合 grep
过滤(如 ps -elf | grep gnome-shell
查看桌面进程),快速定位目标进程的详细信息。