LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1140|回复: 9

请教:如何检测某个程序已经运行?

[复制链接]
发表于 2005-3-21 23:01:10 | 显示全部楼层 |阅读模式
我想在用户登陆后运行某程序,但是如果多次登陆就会多次运行,有没有检测某个程序是否已经运行的命令?谢谢
发表于 2005-3-21 23:08:34 | 显示全部楼层
ps -axuw|grep process_name
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-22 00:03:52 | 显示全部楼层
这个命令的返回值是什么呢?
本人接触liunx不久,对shell编程不熟,能否详细指点一下?谢谢
回复 支持 反对

使用道具 举报

发表于 2005-3-22 09:08:08 | 显示全部楼层
NAME
ps - report a snapshot of the current processes.

SYNOPSIS
ps [options]

DESCRIPTION
ps displays information about a selection of the active processes. If you want
a repetitive update of the selection and the displayed information, use top(1)
instead.

This version of ps accepts several kinds of options:
1   UNIX options, which may be grouped and must be preceeded by a dash.
2   BSD options, which may be grouped and must not be used with a dash.
3   GNU long options, which are preceeded by two dashes.

Options of different types may be freely mixed, but conflicts can appear.
There are some synonomous options, which are functionally identical, due to
the many standards and ps implementations that this ps is compatible with.

Note that "ps -aux" is distinct from "ps aux". The POSIX and UNIX standards
Manual page ps(1) line 1

Note that "ps -aux" is distinct from "ps aux". The POSIX and UNIX standards
require that "ps -aux" print all processes owned by a user named "x", as well
as printing all processes that would be selected by the -a option. If the user
named "x" does not exist, this ps may interpret the command as "ps aux"
instead and print a warning. This behavior is intended to aid in transitioning
old scripts and habits. It is fragile, subject to change, and thus should not
be relied upon.

By default, ps selects all processes with the same effective user ID (EUID) as
the curent user and associated with the same terminal as the invoker. It
displays the process ID (PID), the terminal associated with the process (TTY),
the cumulated CPU time in [dd-]hh:mm:ss format (TIME), and the executable name
(CMD). Output is unsorted by default.

The use of BSD-style options will add process state (STAT) to the default
display and show the command args (COMMAND) instead of the executable name.
You can override this with the PS_FORMAT environment variable. The use of
BSD-style options will also change the process selection to include processes
on other terminals (TTYs) that are owned by you; alternately, this may be
described as setting the selection to be the set of all processes filtered to
exclude processes owned by other users or not on a terminal. These effects are
not considered when options are described as being "identical" below, so -M
will be considered identical to Z and so on.

Except as described below, process selection options are additive. The default
selection is discarded, and then the selected processes are added to the set
of processes to be displayed. A process will thus be shown if it meets any of
the given selection criteria.

EXAMPLES
To see every process on the system using standard syntax:
   ps -e
   ps -ef
   ps -eF
ps -ely

To see every process on the system using BSD syntax:
   ps ax
   ps axu

To print a process tree:
   ps -ejH
   ps axjf

To get info about threads:
   ps -eLf
   ps axms

To get security info:
   ps -eo euser,ruser,suser,fuser,f,comm,label
   ps axZ
   ps -eM
To see every process running as root (real & effective ID) in user format:
   ps -U root -u root u

To see every process with a user-defined format:
   ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
   ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
   ps -eopid,tt,user,fname,tmout,f,wchan

Print only the process IDs of syslogd:
   ps -C syslogd -o pid=

Print only the name of PID 42:
   ps -p 42 -o comm=
SIMPLE PROCESS SELECTION
-A              Select all processes. Identical to -e.

-N              Select all processes except those that fulfill the specified
                conditions. (negates the selection) Identical to --deselect.

T               Select all processes associated with this terminal. Identical
                to the t option without any argument.

-a              Select all processes except session leaders (see getsid(2))
                and processes not associated with a terminal.

a               Lift the BSD-style "only yourself" restriction, which is
                imposed upon the set of all processes when some BSD-style
                (without "-") options are used or when the ps personality
                setting is BSD-like. The set of processes selected in this
                manner is in addition to the set of processes selected by
                other means. An alternate description is that this option
                causes ps to list all processes with a terminal (tty), or to
                list all processes when used together with the x option.
-d              Select all processes except session leaders.

-e              Select all processes. Identical to -A.

g               Really all, even session leaders. This flag is obsolete and
                may be discontinued in a future release. It is normally
                implied by the a flag, and is only useful when operating in
                the sunos4 personality.

r               Restrict the selection to only running processes.

x               Lift the BSD-style "must have a tty" restriction, which is
                imposed upon the set of all processes when some BSD-style
                (without "-") options are used or when the ps personality
                setting is BSD-like. The set of processes selected in this
                manner is in addition to the set of processes selected by
                other means. An alternate description is that this option
                causes ps to list all processes owned by you (same EUID as
                ps), or to list all processes when used together with the a
                option.

--deselect      Select all processes except those that fulfill the specified
                conditions. (negates the selection) Identical to -N.
回复 支持 反对

使用道具 举报

发表于 2005-3-22 09:09:45 | 显示全部楼层
man
学习linux最好的帮手
回复 支持 反对

使用道具 举报

发表于 2005-3-22 09:56:21 | 显示全部楼层
Post by andrew_t
这个命令的返回值是什么呢?
本人接触liunx不久,对shell编程不熟,能否详细指点一下?谢谢

学习以实践为先,你运行一下然后用echo $?查看它的返回值不就行了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-22 11:45:48 | 显示全部楼层
我的.bashrc文件:

colinux:~# vi .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.

export PS1='\h:\w\$ '
umask 022

# You may uncomment the following lines if you want `ls' to be colorized:
export LS_OPTIONS='--color=auto'
eval `dircolors`
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
#alias l='ls $LS_OPTIONS -lA'
#
# Some more alias to avoid making mistakes:
# alias rm='rm -i'
# alias cp='cp -i'
# alias mv='mv -i'

vncsrvstat=`ps -a|grep vncserver`
if $vncsrvstat -eq  1
        then
        echo "Starting Vncserver"
        vncserver -geometry 1000x768 -depth 24
else
".bashrc" 25L, 574C                                           1,1          ¶¥¶Ë


登陆后的提示信息如下:
请问错误在哪?

login as: root
Password:
Last login: Mon Mar 21 22:38:01 2005 from tjz.mshome.net
-bash: -eq: command not found
vncserver is running......
colinux:~#
回复 支持 反对

使用道具 举报

发表于 2005-3-22 16:50:19 | 显示全部楼层
遵守论坛规则,不要一帖多问
回复 支持 反对

使用道具 举报

发表于 2005-3-22 17:25:26 | 显示全部楼层
由错误可以看出是.bashrc中
vncsrvstat=`ps -a|grep vncserver`
if $vncsrvstat -eq 1
then
echo "Starting Vncserver"
vncserver -geometry 1000x768 -depth 24
else
".bashrc" 25L, 574C 1,1 ¶¥¶Ë
的原因!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-22 18:16:10 | 显示全部楼层
....
楼上的,我知道是.bashrc文件问题,就是不知道为什么是错的呀。
一贴多问了?不好意思,刚来不懂了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表