免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3350 | 回复: 7
打印 上一主题 下一主题

Solaris下如何改变一个正在运行的进程的当前工作目录(cwd)? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-13 11:46 |只看该作者 |倒序浏览
某个进程正在运行,由于某种原因需要改变其当前工作目录(cwd),不知有没有办法?

环境:
Release: 5.9
Kernel architecture: sun4u
Application architecture: sparc
Hardware provider: Sun_Microsystems
Domain:
Kernel version: SunOS 5.9 Generic 118558-28 May 2006

论坛徽章:
0
2 [报告]
发表于 2007-06-13 12:36 |只看该作者
原帖由 lemontel 于 2007-6-13 11:46 发表
某个进程正在运行,由于某种原因需要改变其当前工作目录(cwd),不知有没有办法?

环境:
Release: 5.9
Kernel architecture: sun4u
Application architecture: sparc
Hardware provider: Sun_Microsystems ...


可以,每个进程都有一个相当于pwd的变量保存了当前的目录,但是USER态是改不了的

实际上这个东西只能通过chdir系统调用改

论坛徽章:
0
3 [报告]
发表于 2007-06-14 12:44 |只看该作者
原帖由 flw2 于 2007-6-13 12:36 发表


可以,每个进程都有一个相当于pwd的变量保存了当前的目录,但是USER态是改不了的

实际上这个东西只能通过chdir系统调用改


看来在外面是不好改啰

论坛徽章:
0
4 [报告]
发表于 2007-06-14 12:55 |只看该作者
原帖由 lemontel 于 2007-6-14 12:44 发表


看来在外面是不好改啰


不好改和不能改不是一回事呀

论坛徽章:
0
5 [报告]
发表于 2007-06-14 19:24 |只看该作者

chdir

你看看 chdir() 是否你想要的?

论坛徽章:
0
6 [报告]
发表于 2007-06-14 19:47 |只看该作者
通知它,让它自己改。

论坛徽章:
0
7 [报告]
发表于 2007-06-15 13:08 |只看该作者
原帖由 langue 于 2007-6-14 19:47 发表
通知它,让它自己改。


问题场景:

1. 某个常驻进程负责将周期性采集的业务数据保存到数据库中。

2. 此常驻进程内部维护有一个业务数据的队列。

3. 当队列中的一条数据入库成功后就会删除。并且周期性地有大量数据入队列。

4. 此队列有一个最大长度(例如50000条记录)。当队列满后,队列中的数据会临时保存到本地文件系统上。

5. 缺省保存到的文件位于进程的当前工作目录下(进程执行过程中不修改当前工作目录,因此,进程执行过程
中的当前工作目录就是启动时的工作目录)。

6. 某天数据库性能极差,队列满的可能性很大。

7. 不幸发现,进程是在某个临时目录下启动的,该临时目录已不存在了。也没人能回忆起当时启动时的工作目录的具体名称和路径了。

8. 如果数据库的性能不能很快改善,队列很快就要满,队列中的数据将往进程当前工作目录下的某个文件中进行缓存。由于当前工作目录已不存在,缓存动作将会失败,队列中的数据将会丢失,可能造成若干小时业务数据中断。

9. 进程正常情况下可以重启,正常重启时会将队列中的数据临时保存到本地文件系统上。不幸的是,保存到的文件缺省也位于进程的当前工作目录下。此时重启,队列中的数据也会丢失。

10. 如何解决呢?

a) 迅速改善数据库性能,待队列空时立即重启进程。

b) 通过某种手段获取到进程当前工作目录的详细路径,手工重建该路径。则队列满后,缓存动作能够成功,数据不会丢失。
由于进程的当前工作目录已不存在了,/proc/<pid>/cwd目录下为空,lsof查出来的cwd变成了真正当前工作目录的上级路径中存在的某个目录的名称了。



c) 通过某种手段改变进程的当前工作目录到一个存在的目录下。此时,队列满后,缓存动作能够成功,数据也不崔丢失。

其中,c)正是此贴提出的问题。

不知b)是否有解法?

问题最终通过a)解决。

谢谢各位参与!

论坛徽章:
0
8 [报告]
发表于 2007-06-15 20:27 |只看该作者
如果一个进程总是试图删除/bin/下面的文件,我肯定不会去用root运行它,而不会考虑是否要把/bin 移到 /root/bin
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP