69,371
社区成员
发帖
与我相关
我的任务
分享
linux的进程的问题:
装了wireshark,桌面里运行终端,由于自己没有找到快捷方式,直接用命令./wireshark启动。
启动后,我觉得终端碍手碍脚,于是关闭终端,wireshark居然退出了?
难道父进程死,子进程也得死?
有这么干的吗?
另一个问题
xshell连接linux ,运行了某个程序,突然网断了, xshell的窗口退出,
大家猜猜,在xshell用命令启动的程序的进程还在不?
这2个问题,是同一个问题, 父进程和子进程的生死问题。
问题3:
env MIBS="+MY-PERSONAL-MIB" mib2c
mibc2c 是一个程序的名字
通过man env 可以得到:
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
env MIBS="+MY-PERSONAL-MIB" mib2c
意思是让, mib2c运行在 修改的环境里?
可是为什么多了一个+ 号?
难道,不该是 mibs=$mibs:"xxxx-mib" mib2c ?
void
netsnmp_init_mib(void)
{
const char *prefix;
char *env_var, *entry;
PrefixListPtr pp = &mib_prefixes[0];
char *st = NULL;
if (Mib)
return;
netsnmp_init_mib_internals();
/*
* Initialise the MIB directory/ies
*/
netsnmp_fixup_mib_directory();
env_var = strdup(netsnmp_get_mib_directory());
netsnmp_mibindex_load();
DEBUGMSGTL(("init_mib",
"Seen MIBDIRS: Looking in '%s' for mib dirs ...\n",
env_var));
entry = strtok_r(env_var, ENV_SEPARATOR, &st);
while (entry) {
add_mibdir(entry);
entry = strtok_r(NULL, ENV_SEPARATOR, &st);
}
SNMP_FREE(env_var);
env_var = netsnmp_getenv("MIBFILES");
if (env_var != NULL) {
if (*env_var == '+')
entry = strtok_r(env_var+1, ENV_SEPARATOR, &st);
else
entry = strtok_r(env_var, ENV_SEPARATOR, &st);
while (entry) {
add_mibfile(entry, NULL, NULL);
entry = strtok_r(NULL, ENV_SEPARATOR, &st);
}
}
netsnmp_init_mib_internals();
/*
* Read in any modules or mibs requested
*/
env_var = netsnmp_getenv("MIBS");
if (env_var == NULL) {
if (confmibs != NULL)
env_var = strdup(confmibs);
else
env_var = strdup(NETSNMP_DEFAULT_MIBS);
} else {
env_var = strdup(env_var);
}
if (env_var && ((*env_var == '+') || (*env_var == '-'))) {
entry =
(char *) malloc(strlen(NETSNMP_DEFAULT_MIBS) + strlen(env_var) + 2);
if (!entry) {
DEBUGMSGTL(("init_mib", "env mibs malloc failed"));
SNMP_FREE(env_var);
return;
} else {
if (*env_var == '+')
sprintf(entry, "%s%c%s", NETSNMP_DEFAULT_MIBS, ENV_SEPARATOR_CHAR,
env_var+1);
else
sprintf(entry, "%s%c%s", env_var+1, ENV_SEPARATOR_CHAR,
NETSNMP_DEFAULT_MIBS );
}
SNMP_FREE(env_var);
env_var = entry;
}
env_var = netsnmp_getenv("MIBS");
if (env_var && ((*env_var == '+') || (*env_var == '-'))) {
看+号, 这说明+号是代码自身处理。与linux无关。
猜测windows也是如此。这个程序是跨平台的,没有在网上看到windos的使用例子。
但代码是这样处理的。
[/quote]
代码看了一下, windows应该差不多。
只不过env mibs='+' mib2c
windows肯定是不能这么用的。
void
netsnmp_init_mib(void)
{
const char *prefix;
char *env_var, *entry;
PrefixListPtr pp = &mib_prefixes[0];
char *st = NULL;
if (Mib)
return;
netsnmp_init_mib_internals();
/*
* Initialise the MIB directory/ies
*/
netsnmp_fixup_mib_directory();
env_var = strdup(netsnmp_get_mib_directory());
netsnmp_mibindex_load();
DEBUGMSGTL(("init_mib",
"Seen MIBDIRS: Looking in '%s' for mib dirs ...\n",
env_var));
entry = strtok_r(env_var, ENV_SEPARATOR, &st);
while (entry) {
add_mibdir(entry);
entry = strtok_r(NULL, ENV_SEPARATOR, &st);
}
SNMP_FREE(env_var);
env_var = netsnmp_getenv("MIBFILES");
if (env_var != NULL) {
if (*env_var == '+')
entry = strtok_r(env_var+1, ENV_SEPARATOR, &st);
else
entry = strtok_r(env_var, ENV_SEPARATOR, &st);
while (entry) {
add_mibfile(entry, NULL, NULL);
entry = strtok_r(NULL, ENV_SEPARATOR, &st);
}
}
netsnmp_init_mib_internals();
/*
* Read in any modules or mibs requested
*/
env_var = netsnmp_getenv("MIBS");
if (env_var == NULL) {
if (confmibs != NULL)
env_var = strdup(confmibs);
else
env_var = strdup(NETSNMP_DEFAULT_MIBS);
} else {
env_var = strdup(env_var);
}
if (env_var && ((*env_var == '+') || (*env_var == '-'))) {
entry =
(char *) malloc(strlen(NETSNMP_DEFAULT_MIBS) + strlen(env_var) + 2);
if (!entry) {
DEBUGMSGTL(("init_mib", "env mibs malloc failed"));
SNMP_FREE(env_var);
return;
} else {
if (*env_var == '+')
sprintf(entry, "%s%c%s", NETSNMP_DEFAULT_MIBS, ENV_SEPARATOR_CHAR,
env_var+1);
else
sprintf(entry, "%s%c%s", env_var+1, ENV_SEPARATOR_CHAR,
NETSNMP_DEFAULT_MIBS );
}
SNMP_FREE(env_var);
env_var = entry;
}
env_var = netsnmp_getenv("MIBS");
if (env_var && ((*env_var == '+') || (*env_var == '-'))) {
看+号, 这说明+号是代码自身处理。与linux无关。
猜测windows也是如此。这个程序是跨平台的,没有在网上看到windos的使用例子。
但代码是这样处理的。
The mib2c tool accepts both SMIv1 and SMIv2 MIBs.
mib2c needs to be able to find and load a MIB file in order to generate C code for the MIB. To enable mib2c to find the MIB
file, set the MIBS environment variable to include the MIB file you are using. An example of setting this environment
variable is:
MIBS=+NET-SNMP-TUTORIAL-MIB
or
MIBS=ALL
$ ./wireshark
$ <ctrl+z>
$ pg <ctrl+z>时显示的暂停的进程的作业ID
$ nohup ./wireshark &
抱歉,我打错了,第二个方法代码还得把暂停的进程转后台执行
$ ./wireshark &
2、就是我说的,启动进程后,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行
但是这些方法也有个问题,那就是父进程目前还是没有任何变动,后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号。使用如下代码
$ ./wireshark
$ <ctrl+z>
$ nohup ./wireshark &
以上回答如有错误,请楼下指出。