sudo strace chvt 4 execve("/bin/chvt", ["chvt", "4"], 0x7ffd63e5c758 /* 17 vars */) = 0 brk(NULL) = 0x561e18430000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=74655, ...}) = 0 mmap(NULL, 74655, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f5059e7d000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\34\2\0\0\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=2030544, ...}) = 0 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5059e7b000 mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f5059878000 mprotect(0x7f5059a5f000, 2097152, PROT_NONE) = 0 mmap(0x7f5059c5f000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f5059c5f000 mmap(0x7f5059c65000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f5059c65000 close(3) = 0 arch_prctl(ARCH_SET_FS, 0x7f5059e7c500) = 0 mprotect(0x7f5059c5f000, 16384, PROT_READ) = 0 mprotect(0x561e17e87000, 4096, PROT_READ) = 0 mprotect(0x7f5059e90000, 4096, PROT_READ) = 0 munmap(0x7f5059e7d000, 74655) = 0 brk(NULL) = 0x561e18430000 brk(0x561e18451000) = 0x561e18451000 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=10281936, ...}) = 0 mmap(NULL, 10281936, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f5058ea9000 close(3) = 0 openat(AT_FDCWD, "/proc/self/fd/0", O_RDWR) = 3 ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(3, KDGKBTYPE, 0x7ffdcdb0efa7) = -1 ENOTTY (Inappropriate ioctl for device) close(3) = 0 openat(AT_FDCWD, "/dev/tty", O_RDWR) = 3 ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(3, KDGKBTYPE, 0x7ffdcdb0efa7) = -1 ENOTTY (Inappropriate ioctl for device) close(3) = 0 openat(AT_FDCWD, "/dev/tty0", O_RDWR) = 3 ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0 ioctl(3, KDGKBTYPE, 0x7ffdcdb0efa7) = 0 ioctl(3, VT_ACTIVATE, 0x4) = 0 ioctl(3, VT_WAITACTIVE, 0x4
VT_ACTIVATE will cause a switch to VT number. VT_WAITACTIVE will sleep/wait until the specified VT has been activated.
$ sudo cat /proc/$(pidof chvt)/stack [<0>] __vt_event_wait.isra.2.part.3+0x40/0x90 [<0>] vt_waitactive+0x80/0xd0 [<0>] vt_ioctl+0xd26/0x1140 [<0>] tty_ioctl+0xf6/0x8c0 [<0>] do_vfs_ioctl+0xa8/0x630 [<0>] SyS_ioctl+0x79/0x90 [<0>] do_syscall_64+0x73/0x130 [<0>] entry_SYSCALL_64_after_hwframe+0x3d/0xa2 [<0>] 0xffffffffffffffff
sudo strace chvt 4 "/etc/ld. so.nohwcap" , F_OK) = -1 ENOENT (No such file or directory) "/etc/ld. so.preload" , R_OK) = -1 ENOENT (No such file or directory) S_IFREG| 0644, st_size=74655, ...}) = 0 "/etc/ld. so.nohwcap" , F_OK) = -1 ENOENT (No such file or directory) 64-linux- gnu/libc. so.6", O_RDONLY|O_CLOEXEC) = 3 2\1\1\3\ 0\0\0\0\ 0\0\0\0\ 3\0>\0\ 1\0\0\0\ 260\34\ 2\0\0\0\ 0\0"... , 832) = 832 S_IFREG| 0755, st_size=2030544, ...}) = 0 PROT_WRITE, MAP_PRIVATE| MAP_ANONYMOUS, -1, 0) = 0x7f5059e7b000 PROT_EXEC, MAP_PRIVATE| MAP_DENYWRITE, 3, 0) = 0x7f5059878000 0x7f5059a5f000, 2097152, PROT_NONE) = 0 f000, 24576, PROT_READ| PROT_WRITE, MAP_PRIVATE| MAP_FIXED| MAP_DENYWRITE, 3, 0x1e7000) = 0x7f5059c5f000 5000, 15072, PROT_READ| PROT_WRITE, MAP_PRIVATE| MAP_FIXED| MAP_ANONYMOUS, -1, 0) = 0x7f5059c65000 ARCH_SET_ FS, 0x7f5059e7c500) = 0 0x7f5059c5f000, 16384, PROT_READ) = 0 0x561e17e87000, 4096, PROT_READ) = 0 0x7f5059e90000, 4096, PROT_READ) = 0 0x7f5059e7d000, 74655) = 0 locale/ locale- archive" , O_RDONLY|O_CLOEXEC) = 3 S_IFREG| 0644, st_size=10281936, ...}) = 0
execve("/bin/chvt", ["chvt", "4"], 0x7ffd63e5c758 /* 17 vars */) = 0
brk(NULL) = 0x561e18430000
access(
access(
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=
mmap(NULL, 74655, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f5059e7d000
close(3) = 0
access(
openat(AT_FDCWD, "/lib/x86_
read(3, "\177ELF\
fstat(3, {st_mode=
mmap(NULL, 8192, PROT_READ|
mmap(NULL, 4131552, PROT_READ|
mprotect(
mmap(0x7f5059c5
mmap(0x7f5059c6
close(3) = 0
arch_prctl(
mprotect(
mprotect(
mprotect(
munmap(
brk(NULL) = 0x561e18430000
brk(0x561e18451000) = 0x561e18451000
openat(AT_FDCWD, "/usr/lib/
fstat(3, {st_mode=
mmap(NULL, 10281936, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f5058ea9000
close(3) = 0
openat(AT_FDCWD, "/proc/self/fd/0", O_RDWR) = 3
ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0x7ffdcdb0efa7) = -1 ENOTTY (Inappropriate ioctl for device)
close(3) = 0
openat(AT_FDCWD, "/dev/tty", O_RDWR) = 3
ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0x7ffdcdb0efa7) = -1 ENOTTY (Inappropriate ioctl for device)
close(3) = 0
openat(AT_FDCWD, "/dev/tty0", O_RDWR) = 3
ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0x7ffdcdb0efa7) = 0
ioctl(3, VT_ACTIVATE, 0x4) = 0
ioctl(3, VT_WAITACTIVE, 0x4
VT_ACTIVATE will cause a switch to VT number.
VT_WAITACTIVE will sleep/wait until the specified VT has been activated.
$ sudo cat /proc/$(pidof chvt)/stack wait.isra. 2.part. 3+0x40/ 0x90 0x80/0xd0 0xd26/0x1140 0xf6/0x8c0 ioctl+0xa8/ 0x630 64+0x73/ 0x130 64_after_ hwframe+ 0x3d/0xa2
[<0>] __vt_event_
[<0>] vt_waitactive+
[<0>] vt_ioctl+
[<0>] tty_ioctl+
[<0>] do_vfs_
[<0>] SyS_ioctl+0x79/0x90
[<0>] do_syscall_
[<0>] entry_SYSCALL_
[<0>] 0xffffffffffffffff