ERROR: Application failed to initialize
错误消息并没有提供关于应用程序为什么会启动失败的具体信息 。在这里,问题是故意引入的,但是您使用的任何命令或应用程序都可能出现相同的问题,而错误消息没什么帮助,有时候甚至没有错误消息 。
对应用程序运行跟踪可能会提供一些线索(见清单 6) 。
清单 6. 运行跟踪
$ truss ./errnoacc
execve("errnoacc", 0x08047B20, 0x08047B28) argc = 1
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, -1, 0)
= 0xFEFB0000
resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) = 12
getcwd("/export/home/mc", 1014) = 0
resolvepath("/export/home/mc/errnoacc", "/export/home/mc/errnoacc", 1023) = 24
xstat(2, "/export/home/mc/errnoacc", 0x080477E4) = 0
open("/var/ld/ld.config", O_RDONLY) = 3
fxstat(2, 3, 0x080476C4)= 0
mmap(0x00000000, 144, PROT_READ, MAP_SHARED, 3, 0) = 0xFEFA0000
close(3)= 0
sysconfig(_CONFIG_PAGESIZE) = 4096
xstat(2, "/usr/lib/libc.so.1", 0x08046F04) = 0
resolvepath("/usr/lib/libc.so.1", "/lib/libc.so.1", 1023) = 14
open("/usr/lib/libc.so.1", O_RDONLY)= 3
mmap(0x00010000, 32768, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ALIGN, 3, 0) = 0xFEF90000
mmap(0x00010000, 1413120, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE|MAP_ANON|MAP_ALIGN,
-1, 0) = 0xFEE30000
mmap(0xFEE30000, 1302809, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_TEXT, 3, 0)
= 0xFEE30000
mmap(0xFEF7F000, 30862, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|
MAP_INITDATA, 3, 1306624) = 0xFEF7F000
mmap(0xFEF87000, 4776, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANON,
-1, 0) = 0xFEF87000
munmap(0xFEF6F000, 65536)= 0
memcntl(0xFEE30000, 187632, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
close(3)= 0
mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON|MAP_ALIGN,
-1, 0) = 0xFEE20000
munmap(0xFEF90000, 32768)= 0
getcontext(0x08047534)
getrlimit(RLIMIT_STACK, 0x0804752C) = 0
getpid()= 15727 [15726]
lwp_private(0, 1, 0xFEE22A00)= 0x000001C3
setustack(0xFEE22A60)
sysi86(SI86FPSTART, 0xFEF879BC, 0x0000133F, 0x00001F80) = 0x00000001
open("/etc/shadow", O_RDONLY)Err#13 EACCES [file_dac_read]
ioctl(1, TCGETA, 0x08046BB0)= 0
fstat64(1, 0x08046B10) = 0
ERROR: Application failed to initialize
write(1, " E R R O R :A p p l i".., 40) = 40
_exit(0)
问题出现在这一行上:open("/etc/shadow", O_RDONLY) Err#13 EACCES [file_dac_read] 。
在这里,应用程序试图打开一个文件,但是因为有文件权限保护这个文件,运行应用程序的用户没有访问权 。因为无法打开这个文件,应用程序终止并在进程中写错误消息 。
跟踪正在运行的应用程序
希望跟踪应用程序常常是因为应用程序已经启动,而您希望查明应用程序为什么不工作了 。与初始化示例一样,应用程序提供的错误消息或其他信息常常没有准确地指出问题 。
试图锁定或访问另一个进程正在使用的资源会使应用程序看起来冻结了,没有响应 。
strace 和 truss 都能够 “连接 到正在运行的进程 。连接到进程的跟踪与从命令行运行进程的跟踪相似,也产生程序正在执行的系统函数的列表 。实际的跟踪从跟踪启动时执行的函数开始;对于在执行期间 “挂起 的程序,跟踪应该会显示程序正在等待的函数 。
推荐阅读
- UNIX操作系统复杂的关机过程
- Unix文件名与Windows文件名的差异
- Unix中利用转义和引用来管理元字符
- 自动杀死Unix僵死的进程
- Unix操作系统中处理字符串问题的简单方式
- SCO unix三种安装BTLD的方式
- UNIX及SYBASE的安装
- 在Sco Unix下拨号上网
- 如何自动杀死UNIX僵死的进程
- 下 HP 服务器安装 SCOUNIX 5.0.4/5