电脑技术学习

跟踪 UNIX 应用程序的解决方案

dn001

  问题出现在这一行上:open("/etc/shadow", O_RDONLY) Err#13 EACCES [file_dac_read]。

  在这里,应用程序试图打开一个文件,但是因为有文件权限保护这个文件,运行应用程序的用户没有访问权。因为无法打开这个文件,应用程序终止并在进程中写错误消息。

  跟踪正在运行的应用程序

  希望跟踪应用程序常常是因为应用程序已经启动,而您希望查明应用程序为什么不工作了。与初始化示例一样,应用程序提供的错误消息或其他信息常常没有准确地指出问题。

  试图锁定或访问另一个进程正在使用的资源会使应用程序看起来冻结了,没有响应。

  strace 和 truss 都能够 “连接 到正在运行的进程。连接到进程的跟踪与从命令行运行进程的跟踪相似,也产生程序正在执行的系统函数的列表。实际的跟踪从跟踪启动时执行的函数开始;对于在执行期间 “挂起 的程序,跟踪应该会显示程序正在等待的函数。

  要想跟踪正在运行的程序,需要指定要跟踪的进程的进程 ID (PID)。例如,在清单 6 中,跟踪的程序已经停止,但是没有报告错误。这里使用 ps 工具列出正在运行的进程(见清单 7)。

  清单 7. 使用 ps 工具列出正在运行的进程

$ ps -ef|grep errlock 
   mc 15779 15747  0 18:26:59 pts/2    0:00 ./errlock 
   mc 15742  680  0 18:26:36 pts/3    0:00 ./errlock 
   mc 15817 15784  0 18:28:44 pts/4    0:00 grep errlock 
   mc 15734  680  0 18:25:00 pts/3    0:01 /usr/bin/eMacs-nox errlock.c 
$ truss -p 15779 
fcntl(3, F_SETLKW, 0x08047AC4) (sleeping...) 

标签: