码迷,mamicode.com
首页 > 系统相关 > 详细

分析Ubuntu18.04启动后的各种任务

时间:2018-11-20 00:01:04      阅读:484      评论:0      收藏:0      [点我收藏+]

标签:metadata   res   keyboard   nice   wget   mode   核心   cpi   vmware   

 

jello@jello:~$ ps -A
  PID TTY          TIME CMD
    1 ?        00:00:02 systemd    由idle进程(进程号为0的进程,那这里怎么没有进程号为0的进程呢?)创建(也就是常说的init进程),名为systemd(system daemon:系统守护进程),进程ID号为1,完成系统的初始化,是系统中所有用户进程的祖先进程
    2 ?        00:00:00 kthreadd  传说中的2号进程,始终运行在内核态,负责所有内核线程的调度和管理
    4 ?        00:00:00 kworker/0:0H 正在cpu核心 0上工作的第0个线程. 0:0的意义:前一个0表示处理器核心0,后面的0表示第0个线程;H的意义:表示优先级很高(nice值小于0)
    6 ?        00:00:00 mm_percpu_wq
    7 ?        00:00:00 ksoftirqd/0
    8 ?        00:00:01 rcu_sched
    9 ?        00:00:00 rcu_bh
   10 ?        00:00:00 migration/0
   11 ?        00:00:00 watchdog/0
   12 ?        00:00:00 cpuhp/0
   13 ?        00:00:00 cpuhp/1
   14 ?        00:00:00 watchdog/1
   15 ?        00:00:00 migration/1
   16 ?        00:00:00 ksoftirqd/1
   18 ?        00:00:00 kworker/1:0H 正在cpu核心1上工作的第0个线程
   19 ?        00:00:00 cpuhp/2
   20 ?        00:00:00 watchdog/2
   21 ?        00:00:00 migration/2
   22 ?        00:00:00 ksoftirqd/2
   24 ?        00:00:00 kworker/2:0H 正在cpu核心 2上工作的第0个线程
   25 ?        00:00:00 cpuhp/3
   26 ?        00:00:00 watchdog/3
   27 ?        00:00:00 migration/3
   28 ?        00:00:00 ksoftirqd/3
   30 ?        00:00:00 kworker/3:0H 正在cpu核心 3上工作的第0个线程
   31 ?        00:00:00 cpuhp/4
   32 ?        00:00:00 watchdog/4
   33 ?        00:00:00 migration/4
   34 ?        00:00:00 ksoftirqd/4
   36 ?        00:00:00 kworker/4:0H 正在cpu核心 4上工作的第0个线程
   37 ?        00:00:00 cpuhp/5
   38 ?        00:00:00 watchdog/5
   39 ?        00:00:00 migration/5
   40 ?        00:00:00 ksoftirqd/5
   41 ?        00:00:00 kworker/5:0 正在cpu核心 0上工作的第0个线程
   42 ?        00:00:00 kworker/5:0H 正在cpu核心 0上工作的第0个线程
   43 ?        00:00:00 cpuhp/6
   44 ?        00:00:00 watchdog/6
   45 ?        00:00:00 migration/6
   46 ?        00:00:00 ksoftirqd/6
   48 ?        00:00:00 kworker/6:0H 正在cpu核心 6上工作的第0个线程
   49 ?        00:00:00 cpuhp/7
   50 ?        00:00:00 watchdog/7
   51 ?        00:00:00 migration/7
   52 ?        00:00:00 ksoftirqd/7
   54 ?        00:00:00 kworker/7:0H 正在cpu核心 7上工作的第0个线程
   55 ?        00:00:00 cpuhp/8
   56 ?        00:00:00 watchdog/8
   57 ?        00:00:00 migration/8
   58 ?        00:00:00 ksoftirqd/8
   59 ?        00:00:00 kworker/8:0 正在cpu核心 8上工作的第0个线程
   60 ?        00:00:00 kworker/8:0H 正在cpu核心 8上工作的第0个线程
   61 ?        00:00:00 cpuhp/9
   62 ?        00:00:00 watchdog/9
   63 ?        00:00:00 migration/9
   64 ?        00:00:00 ksoftirqd/9
   66 ?        00:00:00 kworker/9:0H 正在cpu核心 9上工作的第0个线程
   67 ?        00:00:00 cpuhp/10
   68 ?        00:00:00 watchdog/10
   69 ?        00:00:00 migration/10
   70 ?        00:00:00 ksoftirqd/10
   72 ?        00:00:00 kworker/10:0H 正在cpu核心 10上工作的第0个线程
   73 ?        00:00:00 cpuhp/11
   74 ?        00:00:00 watchdog/11
   75 ?        00:00:00 migration/11
   76 ?        00:00:00 ksoftirqd/11
   78 ?        00:00:00 kworker/11:0H 正在cpu核心 11上工作的第0个线程
   79 ?        00:00:00 cpuhp/12
   80 ?        00:00:00 watchdog/12
   81 ?        00:00:00 migration/12
   82 ?        00:00:00 ksoftirqd/12
   84 ?        00:00:00 kworker/12:0H 正在cpu核心 12上工作的第0个线程
   85 ?        00:00:00 cpuhp/13
   86 ?        00:00:00 watchdog/13
   87 ?        00:00:00 migration/13
   88 ?        00:00:00 ksoftirqd/13
   90 ?        00:00:00 kworker/13:0H 正在cpu核心 13上工作的第0个线程
   91 ?        00:00:00 cpuhp/14
   92 ?        00:00:00 watchdog/14
   93 ?        00:00:00 migration/14
   94 ?        00:00:00 ksoftirqd/14
   96 ?        00:00:00 kworker/14:0H 正在cpu核心 14上工作的第0个线程
   97 ?        00:00:00 cpuhp/15
   98 ?        00:00:00 watchdog/15
   99 ?        00:00:00 migration/15
  100 ?        00:00:00 ksoftirqd/15
  102 ?        00:00:00 kworker/15:0H 正在cpu核心 15上工作的第0个线程
  103 ?        00:00:00 cpuhp/16
  104 ?        00:00:00 watchdog/16
  105 ?        00:00:00 migration/16
  106 ?        00:00:00 ksoftirqd/16
  107 ?        00:00:00 kworker/16:0
  108 ?        00:00:00 kworker/16:0H 正在cpu核心 16上工作的第0个线程
  109 ?        00:00:00 cpuhp/17
  110 ?        00:00:00 watchdog/17
  111 ?        00:00:00 migration/17
  112 ?        00:00:00 ksoftirqd/17
  113 ?        00:00:00 kworker/17:0 正在cpu核心 17上工作的第0个线程
  114 ?        00:00:00 kworker/17:0H 正在cpu核心 17上工作的第0个线程
  115 ?        00:00:00 cpuhp/18
  116 ?        00:00:00 watchdog/18
  117 ?        00:00:00 migration/18
  118 ?        00:00:00 ksoftirqd/18
  119 ?        00:00:00 kworker/18:0 正在cpu核心18上工作的第0个线程
  120 ?        00:00:00 kworker/18:0H 正在cpu核心 18上工作的第0个线程
  121 ?        00:00:00 cpuhp/19
  122 ?        00:00:00 watchdog/19
  123 ?        00:00:00 migration/19
  124 ?        00:00:00 ksoftirqd/19
  125 ?        00:00:00 kworker/19:0 正在cpu核心 19上工作的第0个线程
  126 ?        00:00:00 kworker/19:0H 正在cpu核心 19上工作的第0个线程
  127 ?        00:00:00 kdevtmpfs
  128 ?        00:00:00 netns
  129 ?        00:00:00 rcu_tasks_kthre
  130 ?        00:00:00 kauditd
  131 ?        00:00:00 kworker/0:1 正在cpu核心 0上工作的第1个线程
  132 ?        00:00:00 kworker/1:1 正在cpu核心 1上工作的第1个线程
  133 ?        00:00:00 khungtaskd
  134 ?        00:00:00 oom_reaper
  135 ?        00:00:00 writeback
  136 ?        00:00:00 kcompactd0
  137 ?        00:00:00 ksmd
  138 ?        00:00:00 khugepaged
  139 ?        00:00:00 crypto
  140 ?        00:00:00 kintegrityd
  141 ?        00:00:00 kblockd
  142 ?        00:00:00 ata_sff
  143 ?        00:00:00 md
  144 ?        00:00:00 edac-poller
  145 ?        00:00:00 devfreq_wq
  146 ?        00:00:00 watchdogd
  149 ?        00:00:00 kworker/4:1 正在cpu核心 4上工作的第1个线程
  150 ?        00:00:00 kworker/2:1 正在cpu核心 2上工作的第1个线程
  151 ?        00:00:00 kworker/5:1 正在cpu核心 5上工作的第1个线程
  152 ?        00:00:00 kworker/6:1 正在cpu核心 6上工作的第1个线程
  153 ?        00:00:00 kworker/7:1 正在cpu核心 7上工作的第1个线程
  156 ?        00:00:00 kworker/11:1 正在cpu核心 11上工作的第1个线程
  157 ?        00:00:00 kworker/10:1 正在cpu核心 10上工作的第1个线程
  158 ?        00:00:00 kworker/14:1 正在cpu核心 14上工作的第1个线程
  159 ?        00:00:00 kworker/15:1 正在cpu核心 15上工作的第1个线程
  160 ?        00:00:00 kworker/13:1 正在cpu核心 13上工作的第1个线程
  161 ?        00:00:00 kworker/16:1 正在cpu核心 16上工作的第1个线程
  162 ?        00:00:00 kworker/17:1 正在cpu核心 17上工作的第1个线程
  163 ?        00:00:00 kworker/18:1 正在cpu核心 18上工作的第1个线程
  164 ?        00:00:00 kworker/19:1 正在cpu核心 19上工作的第1个线程
  165 ?        00:00:00 kworker/12:1 正在cpu核心 12上工作的第1个线程
  167 ?        00:00:00 kswapd0
  168 ?        00:00:00 ecryptfs-kthrea
  210 ?        00:00:00 kthrotld
  211 ?        00:00:00 acpi_thermal_pm
  215 ?        00:00:00 ipv6_addrconf
  227 ?        00:00:00 kstrp
  248 ?        00:00:00 charger_manager
  251 ?        00:00:00 kworker/14:2 正在cpu核心 14上工作的第2个线程
  285 ?        00:00:00 kworker/6:2 正在cpu核心 16上工作的第2个线程
  317 ?        00:00:00 scsi_eh_0
  318 ?        00:00:00 scsi_tmf_0
  319 ?        00:00:00 scsi_eh_1
  320 ?        00:00:00 scsi_tmf_1
  321 ?        00:00:00 scsi_eh_2
  322 ?        00:00:00 scsi_tmf_2
  323 ?        00:00:00 scsi_eh_3
  324 ?        00:00:00 scsi_tmf_3
  325 ?        00:00:00 scsi_eh_4
  326 ?        00:00:00 scsi_tmf_4
  327 ?        00:00:00 scsi_eh_5
  328 ?        00:00:00 scsi_tmf_5
  332 ?        00:00:00 nvidia-modeset
  333 ?        00:00:00 kworker/2:2 正在cpu核心 2上工作的第2个线程
  336 ?        00:00:00 kworker/9:1H 正在cpu核心 9上工作的第1个线程
  356 ?        00:00:00 jbd2/sda3-8
  357 ?        00:00:00 ext4-rsv-conver
  390 ?        00:00:02 systemd-journal
  412 ?        00:00:00 systemd-udevd
  414 ?        00:00:00 kworker/15:1H 正在cpu核心 15上工作的第1个线程
  415 ?        00:00:00 kworker/10:1H 正在cpu核心 10上工作的第1个线程
  416 ?        00:00:00 kworker/10:2 正在cpu核心 10上工作的第2个线程
  420 ?        00:00:00 loop0
  427 ?        00:00:00 loop1
  428 ?        00:00:00 kworker/17:1H 正在cpu核心 17上工作的第1个线程
  429 ?        00:00:00 loop2
  440 ?        00:00:00 loop3
  441 ?        00:00:00 loop4
  442 ?        00:00:00 kworker/11:1H  正在cpu核心 11上工作的第1个线程
  455 ?        00:00:00 loop5
  457 ?        00:00:00 kworker/8:1H 正在cpu核心 18上工作的第1个线程
  458 ?        00:00:00 loop6
  468 ?        00:00:00 kworker/1:1H 正在cpu核心 1上工作的第1个线程
  470 ?        00:00:00 kworker/0:1H 正在cpu核心 0上工作的第1个线程
  471 ?        00:00:00 kworker/12:1H 正在cpu核心 12上工作的第1个线程
  472 ?        00:00:00 kworker/13:1H 正在cpu核心 13上工作的第1个线程
  477 ?        00:00:00 kworker/14:1H 正在cpu核心 14上工作的第1个线程
  480 ?        00:00:00 loop7
  481 ?        00:00:00 kworker/4:1H 正在cpu核心 14上工作的第1个线程
  482 ?        00:00:00 kworker/2:1H 正在cpu核心 2上工作的第1个线程
  483 ?        00:00:00 kworker/16:1H 正在cpu核心 16上工作的第1个线程
  484 ?        00:00:00 loop8
  510 ?        00:00:00 kworker/5:1H 正在cpu核心 5上工作的第1个线程
  511 ?        00:00:00 loop9
  512 ?        00:00:00 kworker/3:1H 正在cpu核心 3上工作的第1个线程
  548 ?        00:00:00 UVM global queu
  549 ?        00:00:00 irq/31-mei_me
  554 ?        00:00:00 UVM Tools Event
  565 ?        00:00:00 kworker/7:1H 正在cpu核心 7上工作的第1个线程
  566 ?        00:00:00 loop10
  599 ?        00:00:00 kworker/18:1H 正在cpu核心 18上工作的第1个线程
  608 ?        00:00:00 kworker/19:1H 正在cpu核心 19上工作的第1个线程
  612 ?        00:00:00 kworker/0:2 正在cpu核心 0上工作的第2个线程
  621 ?        00:00:00 loop11
  687 ?        00:00:00 loop12
  690 ?        00:00:00 loop13
  760 ?        00:00:00 cfg80211
  822 ?        00:00:00 loop14
  854 ?        00:00:00 kworker/6:1H 正在cpu核心 6上工作的第1个线程
  857 ?        00:00:00 loop15
  858 ?        00:00:00 loop16
  870 ?        00:00:00 loop17
  953 ?        00:00:00 loop18
 1115 ?        00:00:00 kworker/7:2 正在cpu核心 7上工作的第2个线程
 1126 ?        00:00:00 jbd2/sdb6-8
 1127 ?        00:00:00 ext4-rsv-conver
 1175 ?        00:00:00 systemd-resolve
 1177 ?        00:00:00 systemd-timesyn
 1269 ?        00:00:04 dbus-daemon
 1271 ?        00:00:01 NetworkManager
 1273 ?        00:00:00 systemd-logind
 1276 ?        00:00:02 acpid
 1278 ?        00:00:00 anacron
 1281 ?        00:00:01 snapd
 1289 ?        00:00:00 cron
 1290 ?        00:00:06 wpa_supplicant
 1294 ?        00:00:00 irqbalance
 1295 ?        00:00:00 udisksd
 1296 ?        00:00:00 avahi-daemon
 1299 ?        00:00:00 ModemManager
 1301 ?        00:00:00 accounts-daemon
 1302 ?        00:00:02 rsyslogd
 1304 ?        00:00:00 networkd-dispat
 1321 ?        00:00:00 avahi-daemon
 1347 ?        00:00:00 vmware-usbarbit
 1348 ?        00:00:00 polkitd
 1389 ?        00:00:00 gdm3
 1457 ?        00:00:00 upowerd
 1498 ?        00:00:00 RTW_CMD_THREAD
 1508 ?        00:00:00 gdm-session-wor
 1513 ?        00:00:00 systemd
 1514 ?        00:00:00 (sd-pam)
 1525 tty1     00:00:00 gdm-x-session
 1527 tty1     00:00:01 Xorg
 1530 ?        00:00:30 irq/32-nvidia
 1531 ?        00:00:00 nvidia
 1533 ?        00:00:00 nvidia-persiste
 1539 ?        00:00:00 dbus-daemon
 1545 tty1     00:00:00 gnome-session-b
 1547 ?        00:00:00 at-spi-bus-laun
 1552 ?        00:00:00 dbus-daemon
 1554 ?        00:00:00 at-spi2-registr
 1556 ?        00:00:00 kworker/13:2 正在cpu核心 13上工作的第2个线程
 1564 tty1     00:00:09 gnome-shell
 1572 ?        00:00:00 pulseaudio
 1573 ?        00:00:00 rtkit-daemon
 1605 tty1     00:00:00 ibus-daemon
 1608 tty1     00:00:00 ibus-dconf
 1611 tty1     00:00:00 ibus-x11
 1613 ?        00:00:00 ibus-portal
 1631 ?        00:00:00 whoopsie
 1635 ?        00:00:00 kerneloops
 1640 ?        00:00:00 boltd
 1644 ?        00:00:00 kerneloops
 1662 ?        00:00:00 iprt-VBoxWQueue
 1673 ?        00:00:17 packagekitd
 1676 tty1     00:00:00 gsd-xsettings
 1693 tty1     00:00:00 gsd-a11y-settin
 1695 tty1     00:00:00 gsd-clipboard
 1703 ?        00:00:00 iprt-VBoxTscThr
 1712 tty1     00:00:00 gsd-color
 1716 tty1     00:00:00 gsd-datetime
 1723 tty1     00:00:00 gsd-housekeepin
 1725 tty1     00:00:00 gsd-keyboard
 1731 tty1     00:00:00 gsd-media-keys
 1737 tty1     00:00:00 gsd-mouse
 1738 tty1     00:00:00 gsd-power
 1748 tty1     00:00:00 gsd-print-notif
 1756 tty1     00:00:00 gsd-rfkill
 1764 tty1     00:00:00 gsd-screensaver
 1766 tty1     00:00:00 gsd-sharing
 1776 tty1     00:00:00 gsd-smartcard
 1784 tty1     00:00:00 gsd-sound
 1792 tty1     00:00:00 gsd-wacom
 1825 ?        00:00:00 colord
 1842 ?        00:00:00 vmware-vmblock-
 1871 ?        00:00:00 vmware-authdlau
 1876 tty1     00:00:00 ibus-engine-sim
 1887 ?        00:00:00 dhclient
 2165 ?        00:00:00 kworker/1:0 正在cpu核心 1上工作的第0个线程
 2509 ?        00:00:00 gdm-session-wor
 2513 ?        00:00:00 systemd
 2514 ?        00:00:00 (sd-pam)
 2528 ?        00:00:00 gnome-keyring-d
 2533 tty2     00:00:00 gdm-x-session
 2535 tty2     00:01:39 Xorg
 2541 ?        00:00:01 dbus-daemon
 2547 tty2     00:00:00 gnome-session-b
 2569 ?        00:00:05 fcitx
 2626 ?        00:00:02 dbus-daemon
 2634 ?        00:00:00 fcitx-dbus-watc
 2635 ?        00:00:00 ssh-agent
 2640 ?        00:00:00 at-spi-bus-laun
 2645 ?        00:00:00 dbus-daemon
 2647 ?        00:00:00 at-spi2-registr
 2664 tty2     00:03:11 gnome-shell
 2670 ?        00:00:00 gvfsd
 2675 ?        00:00:00 gvfsd-fuse
 2686 ?        00:00:01 pulseaudio
 2715 tty2     00:00:00 ibus-daemon
 2719 tty2     00:00:00 ibus-dconf
 2721 tty2     00:00:00 ibus-x11
 2723 ?        00:00:00 ibus-portal
 2734 ?        00:00:00 gnome-shell-cal
 2738 ?        00:00:00 evolution-sourc
 2746 ?        00:00:00 goa-daemon
 2754 ?        00:00:00 dconf-service
 2764 ?        00:00:00 goa-identity-se
 2768 ?        00:00:00 gvfs-udisks2-vo
 2772 ?        00:00:00 gvfs-mtp-volume
 2776 ?        00:00:00 gvfs-afc-volume
 2781 ?        00:00:00 gvfs-gphoto2-vo
 2785 ?        00:00:00 gvfs-goa-volume
 2789 tty2     00:00:00 gsd-power
 2790 tty2     00:00:00 gsd-print-notif
 2792 tty2     00:00:00 gsd-rfkill
 2793 tty2     00:00:00 gsd-screensaver
 2794 tty2     00:00:00 gsd-sharing
 2796 tty2     00:00:00 gsd-smartcard
 2800 tty2     00:00:00 gsd-sound
 2804 tty2     00:00:00 gsd-xsettings
 2807 tty2     00:00:00 gsd-wacom
 2817 tty2     00:00:00 gsd-a11y-settin
 2819 tty2     00:00:00 gsd-clipboard
 2821 tty2     00:00:00 gsd-color
 2824 tty2     00:00:00 gsd-datetime
 2825 tty2     00:00:00 gsd-housekeepin
 2826 tty2     00:00:00 gsd-keyboard
 2829 tty2     00:00:00 gsd-media-keys
 2834 tty2     00:00:00 gsd-mouse
 2875 tty2     00:00:07 gnome-software
 2879 tty2     00:00:01 nautilus-deskto
 2880 tty2     00:00:00 gsd-disk-utilit
 2903 ?        00:00:00 gvfsd-trash
 2912 ?        00:00:00 evolution-calen
 2915 tty2     00:00:00 gsd-printer
 2939 ?        00:00:00 evolution-calen
 2944 tty2     00:00:00 ibus-engine-sim
 2955 ?        00:00:00 evolution-addre
 2967 ?        00:00:00 evolution-addre
 2996 ?        00:00:00 gvfsd-metadata
 3001 ?        00:00:00 fwupd
 3015 ?        00:00:05 sogou-qimpanel
 3094 ?        00:00:00 kworker/12:2 正在cpu核心 12上工作的第2个线程
 3138 ?        00:00:00 kworker/8:2 正在cpu核心 8上工作的第2个线程
 3141 tty2     00:00:00 update-notifier
 3189 ?        00:00:04 http
 3190 ?        00:00:29 http
 3289 ?        00:00:00 cupsd
 3290 ?        00:00:00 cups-browsed
 3349 tty2     00:00:00 deja-dup-monito
 3380 ?        00:00:32 gnome-terminal-
 3387 pts/0    00:00:00 bash
 3403 ?        00:00:00 sogou-qimpanel-
 3510 ?        00:00:00 kworker/u40:0   u表示unbound的意思,此时40的含义就变成了work pool的ID,整体的意义即为work pool ID为4上0的第0个线程
 3535 tty2     00:02:02 firefox
 3605 tty2     00:00:49 Web Content
 3894 ?        00:00:00 http
 3943 tty2     00:00:16 Web Content
 4434 tty2     00:01:11 Web Content
 5031 tty2     00:01:03 Web Content
 5313 ?        00:00:00 kworker/11:0 正在cpu核心 11上工作的第0个线程
 5510 pts/1    00:00:00 bash
 5555 ?        00:00:00 kworker/3:1 正在cpu核心 3上工作的第1个线程
 8010 pts/2    00:00:00 make
 8124 ?        00:00:00 kworker/3:2 正在cpu核心 3上工作的第2个线程
 8448 ?        00:00:00 kworker/4:0 正在cpu核心 4上工作的第0个线程
 8554 pts/0    00:00:01 script
 8555 pts/2    00:00:00 bash
 8945 pts/2    00:00:00 make
 9205 pts/2    00:00:00 sh
 9207 pts/2    00:00:00 make
 9428 ?        00:00:00 kworker/u40:1  work pool ID为40上的第1个线程
10731 ?        00:00:00 kworker/9:1 正在cpu核心 9上工作的第1个线程
11579 pts/1    00:00:00 ps
17539 ?        00:00:00 kworker/u40:2 work pool ID为40上的第2个线程
17585 ?        00:00:01 kworker/u40:3 work pool ID为40上的第3个线程
21192 ?        00:00:04 nautilus
24127 ?        00:00:00 kworker/9:2 正在cpu核心 9上工作的第2个线程
26277 ?        00:00:00 kworker/9:0 正在cpu核心 9上工作的第0个线程
30916 ?        00:00:00 kworker/15:0 正在cpu核心 15上工作的第0个线程
31702 pts/2    00:00:00 time
31703 pts/2    00:00:00 make
31708 pts/2    00:00:00 flock
31709 pts/2    00:00:00 sh
31710 pts/2    00:00:00 perl
31712 pts/2    00:00:00 wget
31713 pts/2    00:00:00 sh
31714 pts/2    00:00:00 mkhash

分析Ubuntu18.04启动后的各种任务

标签:metadata   res   keyboard   nice   wget   mode   核心   cpi   vmware   

原文地址:https://www.cnblogs.com/dakewei/p/9986302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!